config

Personal configuration.
git clone git://code.dwrz.net/config
Log | Files | Refs

transient.info (172297B)


      1 This is transient.info, produced by makeinfo version 6.8 from
      2 transient.texi.
      3 
      4      Copyright (C) 2018–2024 Free Software Foundation, Inc.
      5 
      6      You can redistribute this document and/or modify it under the terms
      7      of the GNU General Public License as published by the Free Software
      8      Foundation, either version 3 of the License, or (at your option)
      9      any later version.
     10 
     11      This document is distributed in the hope that it will be useful,
     12      but WITHOUT ANY WARRANTY; without even the implied warranty of
     13      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     14      General Public License for more details.
     15 
     16 INFO-DIR-SECTION Emacs misc features
     17 START-INFO-DIR-ENTRY
     18 * Transient: (transient). Transient Commands.
     19 END-INFO-DIR-ENTRY
     20 
     21 
     22 File: transient.info,  Node: Top,  Next: Introduction,  Up: (dir)
     23 
     24 Transient User and Developer Manual
     25 ***********************************
     26 
     27 Transient is the library used to implement the keyboard-driven “menus”
     28 in Magit.  It is distributed as a separate package, so that it can be
     29 used to implement similar menus in other packages.
     30 
     31    This manual can be bit hard to digest when getting started.  A useful
     32 resource to get over that hurdle is Psionic K’s interactive tutorial,
     33 available at <https://github.com/positron-solutions/transient-showcase>.
     34 
     35 This manual is for Transient version 0.8.0.
     36 
     37      Copyright (C) 2018–2024 Free Software Foundation, Inc.
     38 
     39      You can redistribute this document and/or modify it under the terms
     40      of the GNU General Public License as published by the Free Software
     41      Foundation, either version 3 of the License, or (at your option)
     42      any later version.
     43 
     44      This document is distributed in the hope that it will be useful,
     45      but WITHOUT ANY WARRANTY; without even the implied warranty of
     46      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     47      General Public License for more details.
     48 
     49 * Menu:
     50 
     51 * Introduction::
     52 * Usage::
     53 * Modifying Existing Transients::
     54 * Defining New Commands::
     55 * Classes and Methods::
     56 * FAQ::
     57 * Keystroke Index::
     58 * Command and Function Index::
     59 * Variable Index::
     60 * Concept Index::
     61 * GNU General Public License::
     62 
     63 — The Detailed Node Listing —
     64 
     65 Usage
     66 
     67 * Invoking Transients::
     68 * Aborting and Resuming Transients::
     69 * Common Suffix Commands::
     70 * Saving Values::
     71 * Using History::
     72 * Getting Help for Suffix Commands::
     73 * Enabling and Disabling Suffixes::
     74 * Other Commands::
     75 * Configuration::
     76 
     77 Defining New Commands
     78 
     79 * Technical Introduction::
     80 * Defining Transients::
     81 * Binding Suffix and Infix Commands::
     82 * Defining Suffix and Infix Commands::
     83 * Using Infix Arguments::
     84 * Current Suffix Command::
     85 * Current Prefix Command::
     86 * Transient State::
     87 
     88 Binding Suffix and Infix Commands
     89 
     90 * Group Specifications::
     91 * Suffix Specifications::
     92 
     93 
     94 Classes and Methods
     95 
     96 * Group Classes::
     97 * Group Methods::
     98 * Prefix Classes::
     99 * Suffix Classes::
    100 * Prefix Methods::
    101 * Suffix Methods::
    102 * Prefix Slots::
    103 * Suffix Slots::
    104 * Predicate Slots::
    105 
    106 Suffix Methods
    107 
    108 * Suffix Value Methods::
    109 * Suffix Format Methods::
    110 
    111 
    112 
    113 
    114 File: transient.info,  Node: Introduction,  Next: Usage,  Prev: Top,  Up: Top
    115 
    116 1 Introduction
    117 **************
    118 
    119 Transient is the library used to implement the keyboard-driven “menus”
    120 in Magit.  It is distributed as a separate package, so that it can be
    121 used to implement similar menus in other packages.
    122 
    123    This manual can be bit hard to digest when getting started.  A useful
    124 resource to get over that hurdle is Psionic K’s interactive tutorial,
    125 available at <https://github.com/positron-solutions/transient-showcase>.
    126 
    127 Some things that Transient can do
    128 =================================
    129 
    130    • Display current state of arguments
    131    • Display and manage lifecycle of modal bindings
    132    • Contextual user interface
    133    • Flow control for wizard-like composition of interactive forms
    134    • History & persistence
    135    • Rendering arguments for controlling CLI programs
    136 
    137 Complexity in CLI programs
    138 ==========================
    139 
    140 Complexity tends to grow with time.  How do you manage the complexity of
    141 commands?  Consider the humble shell command ‘ls’.  It now has over
    142 _fifty_ command line options.  Some of these are boolean flags (‘ls
    143 -l’).  Some take arguments (‘ls --sort=s’).  Some have no effect unless
    144 paired with other flags (‘ls -lh’).  Some are mutually exclusive.  Some
    145 shell commands even have so many options that they introduce
    146 _subcommands_ (‘git branch’, ‘git commit’), each with their own rich set
    147 of options (‘git branch -f’).
    148 
    149 Using Transient for composing interactive commands
    150 ==================================================
    151 
    152 What about Emacs commands used interactively?  How do these handle
    153 options?  One solution is to make many versions of the same command, so
    154 you don’t need to!  Consider: ‘delete-other-windows’ vs.
    155 ‘delete-other-windows-vertically’ (among many similar examples).
    156 
    157    Some Emacs commands will simply prompt you for the next "argument"
    158 (‘M-x switch-to-buffer’).  Another common solution is to use prefix
    159 arguments which usually start with ‘C-u’.  Sometimes these are sensibly
    160 numerical in nature (‘C-u 4 M-x forward-paragraph’ to move forward 4
    161 paragraphs).  But sometimes they function instead as boolean "switches"
    162 (‘C-u C-SPACE’ to jump to the last mark instead of just setting it, ‘C-u
    163 C-u C-SPACE’ to unconditionally set the mark).  Since there aren’t many
    164 standards for the use of prefix options, you have to read the command’s
    165 documentation to find out what the possibilities are.
    166 
    167    But when an Emacs command grows to have a truly large set of options
    168 and arguments, with dependencies between them, lots of option values,
    169 etc., these simple approaches just don’t scale.  Transient is designed
    170 to solve this issue.  Think of it as the humble prefix argument ‘C-u’,
    171 _raised to the power of 10_.  Like ‘C-u’, it is key driven.  Like the
    172 shell, it supports boolean "flag" options, options that take arguments,
    173 and even "sub-commands", with their own options.  But instead of
    174 searching through a man page or command documentation, well-designed
    175 transients _guide_ their users to the relevant set of options (and even
    176 their possible values!)  directly, taking into account any important
    177 pre-existing Emacs settings.  And while for shell commands like ‘ls’,
    178 there is only one way to "execute" (hit ‘Return’!), transients can
    179 "execute" using multiple different keys tied to one of many
    180 self-documenting _actions_ (imagine having 5 different colored return
    181 keys on your keyboard!).  Transients make navigating and setting large,
    182 complex groups of command options and arguments easy.  Fun even.  Once
    183 you’ve tried it, it’s hard to go back to the ‘C-u what can I do here
    184 again?’ way.
    185 
    186 
    187 File: transient.info,  Node: Usage,  Next: Modifying Existing Transients,  Prev: Introduction,  Up: Top
    188 
    189 2 Usage
    190 *******
    191 
    192 * Menu:
    193 
    194 * Invoking Transients::
    195 * Aborting and Resuming Transients::
    196 * Common Suffix Commands::
    197 * Saving Values::
    198 * Using History::
    199 * Getting Help for Suffix Commands::
    200 * Enabling and Disabling Suffixes::
    201 * Other Commands::
    202 * Configuration::
    203 
    204 
    205 File: transient.info,  Node: Invoking Transients,  Next: Aborting and Resuming Transients,  Up: Usage
    206 
    207 2.1 Invoking Transients
    208 =======================
    209 
    210 A transient prefix command is invoked like any other command by pressing
    211 the key that is bound to that command.  The main difference to other
    212 commands is that a transient prefix command activates a transient
    213 keymap, which temporarily binds the transient’s infix and suffix
    214 commands, and that those bindings are displayed in a transient menu,
    215 displayed in a popup buffer.  Bindings from other keymaps may, or may
    216 not, be disabled while the transient state is in effect.
    217 
    218    There are two kinds of commands that are available after invoking a
    219 transient prefix command; infix and suffix commands.  Infix commands set
    220 some value (which is then shown in the popup buffer), without leaving
    221 the transient.  Suffix commands, on the other hand, usually quit the
    222 transient and they may use the values set by the infix commands, i.e.,
    223 the infix *arguments*.
    224 
    225    Instead of setting arguments to be used by a suffix command, infix
    226 commands may also set some value by side-effect, e.g., by setting the
    227 value of some variable.
    228 
    229 
    230 File: transient.info,  Node: Aborting and Resuming Transients,  Next: Common Suffix Commands,  Prev: Invoking Transients,  Up: Usage
    231 
    232 2.2 Aborting and Resuming Transients
    233 ====================================
    234 
    235 To quit the transient without invoking a suffix command press ‘C-g’.
    236 
    237    Key bindings in transient keymaps may be longer than a single event.
    238 After pressing a valid prefix key, all commands whose bindings do not
    239 begin with that prefix key are temporarily unavailable and grayed out.
    240 To abort the prefix key press ‘C-g’ (which in this case only quits the
    241 prefix key, but not the complete transient).
    242 
    243    A transient prefix command can be bound as a suffix of another
    244 transient.  Invoking such a suffix replaces the current transient state
    245 with a new transient state, i.e., the available bindings change and the
    246 information displayed in the popup buffer is updated accordingly.
    247 Pressing ‘C-g’ while a nested transient is active only quits the
    248 innermost transient, causing a return to the previous transient.
    249 
    250    ‘C-q’ or ‘C-z’ on the other hand always exits all transients.  If you
    251 use the latter, then you can later resume the stack of transients using
    252 ‘M-x transient-resume’.
    253 
    254 ‘C-g’ (‘transient-quit-seq’)
    255 ‘C-g’ (‘transient-quit-one’)
    256      This key quits the currently active incomplete key sequence, if
    257      any, or else the current transient.  When quitting the current
    258      transient, it returns to the previous transient, if any.
    259 
    260    Transient’s predecessor bound ‘q’ instead of ‘C-g’ to the quit
    261 command.  To learn how to get that binding back see
    262 ‘transient-bind-q-to-quit’’s documentation string.
    263 
    264 ‘C-q’ (‘transient-quit-all’)
    265      This command quits the currently active incomplete key sequence, if
    266      any, and all transients, including the active transient and all
    267      suspended transients, if any.
    268 
    269 ‘C-z’ (‘transient-suspend’)
    270      Like ‘transient-quit-all’, this command quits an incomplete key
    271      sequence, if any, and all transients.  Additionally, it saves the
    272      stack of transients so that it can easily be resumed (which is
    273      particularly useful if you quickly need to do “something else” and
    274      the stack is deeper than a single transient, and/or you have
    275      already changed the values of some infix arguments).
    276 
    277      Note that only a single stack of transients can be saved at a time.
    278      If another stack is already saved, then saving a new stack discards
    279      the previous stack.
    280 
    281 ‘M-x transient-resume’
    282      This command resumes the previously suspended stack of transients,
    283      if any.
    284 
    285 
    286 File: transient.info,  Node: Common Suffix Commands,  Next: Saving Values,  Prev: Aborting and Resuming Transients,  Up: Usage
    287 
    288 2.3 Common Suffix Commands
    289 ==========================
    290 
    291 A few shared suffix commands are available in all transients.  These
    292 suffix commands are not shown in the popup buffer by default.
    293 
    294    This includes the aborting commands mentioned in the previous
    295 section, as well as some other commands that are all bound to ‘C-x KEY’.
    296 After ‘C-x’ is pressed, a section featuring all these common commands is
    297 temporarily shown in the popup buffer.  After invoking one of them, the
    298 section disappears again.  Note, however, that one of these commands is
    299 described as “Show common permanently”; invoke that if you want the
    300 common commands to always be shown for all transients.
    301 
    302 ‘C-x t’ (‘transient-toggle-common’)
    303      This command toggles whether the generic commands that are common
    304      to all transients are always displayed or only after typing the
    305      incomplete prefix key sequence ‘C-x’.  This only affects the
    306      current Emacs session.
    307 
    308  -- User Option: transient-show-common-commands
    309      This option controls whether shared suffix commands are shown
    310      alongside the transient-specific infix and suffix commands.  By
    311      default, the shared commands are not shown to avoid overwhelming
    312      the user with too many options.
    313 
    314      While a transient is active, pressing ‘C-x’ always shows the common
    315      commands.  The value of this option can be changed for the current
    316      Emacs session by typing ‘C-x t’ while a transient is active.
    317 
    318    The other common commands are described in either the previous or in
    319 one of the following sections.
    320 
    321 
    322 File: transient.info,  Node: Saving Values,  Next: Using History,  Prev: Common Suffix Commands,  Up: Usage
    323 
    324 2.4 Saving Values
    325 =================
    326 
    327 After setting the infix arguments in a transient, the user can save
    328 those arguments for future invocations.
    329 
    330    Most transients will start out with the saved arguments when they are
    331 invoked.  There are a few exceptions, though.  Some transients are
    332 designed so that the value that they use is stored externally as the
    333 buffer-local value of some variable.  Invoking such a transient again
    334 uses the buffer-local value.  (1)
    335 
    336    If the user does not save the value and just exits using a regular
    337 suffix command, then the value is merely saved to the transient’s
    338 history.  That value won’t be used when the transient is next invoked,
    339 but it is easily accessible (see *note Using History::).
    340 
    341 ‘C-x s’ (‘transient-set’)
    342      This command saves the value of the active transient for this Emacs
    343      session.
    344 
    345 ‘C-x C-s’ (‘transient-save’)
    346      This command saves the value of the active transient persistently
    347      across Emacs sessions.
    348 
    349 ‘C-x C-k’ (‘transient-reset’)
    350      This command clears the set and saved values of the active
    351      transient.
    352 
    353  -- User Option: transient-values-file
    354      This option names the file that is used to persist the values of
    355      transients between Emacs sessions.
    356 
    357    ---------- Footnotes ----------
    358 
    359    (1) ‘magit-diff’ and ‘magit-log’ are two prominent examples, and
    360 their handling of buffer-local values is actually a bit more complicated
    361 than outlined above and even customizable.
    362 
    363 
    364 File: transient.info,  Node: Using History,  Next: Getting Help for Suffix Commands,  Prev: Saving Values,  Up: Usage
    365 
    366 2.5 Using History
    367 =================
    368 
    369 Every time the user invokes a suffix command the transient’s current
    370 value is saved to its history.  These values can be cycled through, the
    371 same way one can cycle through the history of commands that read
    372 user-input in the minibuffer.
    373 
    374 ‘C-M-p’ (‘transient-history-prev’)
    375 ‘C-x p’
    376      This command switches to the previous value used for the active
    377      transient.
    378 
    379 ‘C-M-n’ (‘transient-history-next’)
    380 ‘C-x n’
    381      This command switches to the next value used for the active
    382      transient.
    383 
    384    In addition to the transient-wide history, infixes can have their own
    385 history.  When an infix reads user-input using the minibuffer, the user
    386 can use the regular minibuffer history commands to cycle through
    387 previously used values.  Usually the same keys as those mentioned above
    388 are bound to those commands.
    389 
    390    Authors of transients should arrange for different infix commands
    391 that read the same kind of value to also use the same history key (see
    392 *note Suffix Slots::).
    393 
    394    Both kinds of history are saved to a file when Emacs is exited.
    395 
    396  -- User Option: transient-save-history
    397      This option controls whether the history of transient commands is
    398      saved when exiting Emacs.
    399 
    400  -- User Option: transient-history-file
    401      This option names the file that is used to persist the history of
    402      transients and their infixes between Emacs sessions.
    403 
    404  -- User Option: transient-history-limit
    405      This option controls how many history elements are kept at the time
    406      the history is saved in ‘transient-history-file’.
    407 
    408 
    409 File: transient.info,  Node: Getting Help for Suffix Commands,  Next: Enabling and Disabling Suffixes,  Prev: Using History,  Up: Usage
    410 
    411 2.6 Getting Help for Suffix Commands
    412 ====================================
    413 
    414 Transients can have many suffixes and infixes that the user might not be
    415 familiar with.  To make it trivial to get help for these, Transient
    416 provides access to the documentation directly from the active transient.
    417 
    418 ‘C-h’ (‘transient-help’)
    419      This command enters help mode.  When help mode is active, typing a
    420      key shows information about the suffix command that the key
    421      normally is bound to (instead of invoking it).  Pressing ‘C-h’ a
    422      second time shows information about the _prefix_ command.
    423 
    424      After typing a key, the stack of transient states is suspended and
    425      information about the suffix command is shown instead.  Typing ‘q’
    426      in the help buffer buries that buffer and resumes the transient
    427      state.
    428 
    429    What sort of documentation is shown depends on how the transient was
    430 defined.  For infix commands that represent command-line arguments this
    431 ideally shows the appropriate manpage.  ‘transient-help’ then tries to
    432 jump to the correct location within that.  Info manuals are also
    433 supported.  The fallback is to show the command’s documentation string,
    434 for non-infix suffixes this is usually appropriate.
    435 
    436 
    437 File: transient.info,  Node: Enabling and Disabling Suffixes,  Next: Other Commands,  Prev: Getting Help for Suffix Commands,  Up: Usage
    438 
    439 2.7 Enabling and Disabling Suffixes
    440 ===================================
    441 
    442 The user base of a package that uses transients can be very diverse.
    443 This is certainly the case for Magit; some users have been using it and
    444 Git for a decade, while others are just getting started now.
    445 
    446    For that reason a mechanism is needed that authors can use to
    447 classify a transient’s infixes and suffixes along the
    448 essentials...everything spectrum.  We use the term “levels” to describe
    449 that mechanism.
    450 
    451    Each suffix command is placed on a level and each transient has a
    452 level (called “transient-level”), which controls which suffix commands
    453 are available.  Integers between 1 and 7 (inclusive) are valid levels.
    454 For suffixes, 0 is also valid; it means that the suffix is not displayed
    455 at any level.
    456 
    457    The levels of individual transients and/or their individual suffixes
    458 can be changed interactively, by invoking the transient and then
    459 pressing ‘C-x l’ to enter the “edit” mode, see below.
    460 
    461    The default level for both transients and their suffixes is 4.  The
    462 ‘transient-default-level’ option only controls the default for
    463 transients.  The default suffix level is always 4.  The authors of
    464 transients should place certain suffixes on a higher level, if they
    465 expect that it won’t be of use to most users, and they should place very
    466 important suffixes on a lower level, so that they remain available even
    467 if the user lowers the transient level.
    468 
    469  -- User Option: transient-default-level
    470      This option controls which suffix levels are made available by
    471      default.  It sets the transient-level for transients for which the
    472      user has not set that individually.
    473 
    474  -- User Option: transient-levels-file
    475      This option names the file that is used to persist the levels of
    476      transients and their suffixes between Emacs sessions.
    477 
    478 ‘C-x l’ (‘transient-set-level’)
    479      This command enters edit mode.  When edit mode is active, then all
    480      infixes and suffixes that are currently usable are displayed along
    481      with their levels.  The colors of the levels indicate whether they
    482      are enabled or not.  The level of the transient is also displayed
    483      along with some usage information.
    484 
    485      In edit mode, pressing the key that would usually invoke a certain
    486      suffix instead prompts the user for the level that suffix should be
    487      placed on.
    488 
    489      Help mode is available in edit mode.
    490 
    491      To change the transient level press ‘C-x l’ again.
    492 
    493      To exit edit mode press ‘C-g’.
    494 
    495      Note that edit mode does not display any suffixes that are not
    496      currently usable.  ‘magit-rebase’, for example, shows different
    497      suffixes depending on whether a rebase is already in progress or
    498      not.  The predicates also apply in edit mode.
    499 
    500      Therefore, to control which suffixes are available given a certain
    501      state, you have to make sure that that state is currently active.
    502 
    503 ‘C-x a’ (‘transient-toggle-level-limit’)
    504      This command toggle whether suffixes that are on levels higher than
    505      the level specified by ‘transient-default-level’ are temporarily
    506      available anyway.
    507 
    508 
    509 File: transient.info,  Node: Other Commands,  Next: Configuration,  Prev: Enabling and Disabling Suffixes,  Up: Usage
    510 
    511 2.8 Other Commands
    512 ==================
    513 
    514 When invoking a transient in a small frame, the transient window may not
    515 show the complete buffer, making it necessary to scroll, using the
    516 following commands.  These commands are never shown in the transient
    517 window, and the key bindings are the same as for ‘scroll-up-command’ and
    518 ‘scroll-down-command’ in other buffers.
    519 
    520  -- Command: transient-scroll-up arg
    521      This command scrolls text of transient popup window upward ARG
    522      lines.  If ARG is ‘nil’, then it scrolls near full screen.  This is
    523      a wrapper around ‘scroll-up-command’ (which see).
    524 
    525  -- Command: transient-scroll-down arg
    526      This command scrolls text of transient popup window down ARG lines.
    527      If ARG is ‘nil’, then it scrolls near full screen.  This is a
    528      wrapper around ‘scroll-down-command’ (which see).
    529 
    530 
    531 File: transient.info,  Node: Configuration,  Prev: Other Commands,  Up: Usage
    532 
    533 2.9 Configuration
    534 =================
    535 
    536 More options are described in *note Common Suffix Commands::, in *note
    537 Saving Values::, in *note Using History:: and in *note Enabling and
    538 Disabling Suffixes::.
    539 
    540 Essential Options
    541 -----------------
    542 
    543 Also see *note Common Suffix Commands::.
    544 
    545  -- User Option: transient-show-popup
    546      This option controls whether the current transient’s infix and
    547      suffix commands are shown in the popup buffer.
    548 
    549         • If ‘t’ (the default) then the popup buffer is shown as soon as
    550           a transient prefix command is invoked.
    551 
    552         • If ‘nil’, then the popup buffer is not shown unless the user
    553           explicitly requests it, by pressing an incomplete prefix key
    554           sequence.
    555 
    556         • If a number, then the a brief one-line summary is shown
    557           instead of the popup buffer.  If zero or negative, then not
    558           even that summary is shown; only the pressed key itself is
    559           shown.
    560 
    561           The popup is shown when the user explicitly requests it by
    562           pressing an incomplete prefix key sequence.  Unless this is
    563           zero, the popup is shown after that many seconds of inactivity
    564           (using the absolute value).
    565 
    566  -- User Option: transient-show-common-commands
    567      This option controls whether shared suffix commands are shown
    568      alongside the transient-specific infix and suffix commands.  By
    569      default, the shared commands are not shown to avoid overwhelming
    570      the user with too many options.
    571 
    572      While a transient is active, pressing ‘C-x’ always shows the common
    573      commands.  The value of this option can be changed for the current
    574      Emacs session by typing ‘C-x t’ while a transient is active.
    575 
    576  -- User Option: transient-show-during-minibuffer-read
    577      This option controls whether the transient menu continues to be
    578      displayed while the minibuffer is used to read user input.
    579 
    580      This is only relevant to commands that do not close the menu, such
    581      as commands that set infix arguments.  If a command exits the menu,
    582      and uses the minibuffer, then the menu is always closed before the
    583      minibuffer is entered, irrespective of the value of this option.
    584 
    585      When ‘nil’ (the default), hide the menu while the minibuffer is in
    586      use.  When ‘t’, keep showing the menu, but allow for the menu
    587      window to be resized, to ensure that completion candidates can be
    588      displayed.
    589 
    590      When ‘fixed’, keep showing the menu and prevent it from being
    591      resized, which may make it impossible to display the completion
    592      candidates.  If that ever happens for you, consider using ‘t’ or an
    593      integer, as described below.
    594 
    595      If the value is ‘fixed’ and the menu window uses the full height of
    596      its frame, then the former is ignored and resizing is allowed
    597      anyway.  This is necessary because individual menus may use unusual
    598      display actions different from what
    599      ‘transient-display-buffer-action’ specifies (likely to display that
    600      menu in a side-window).
    601 
    602      When using a third-party mode, which automatically resizes windows
    603      (e.g., by calling ‘balance-windows’ on ‘post-command-hook’), then
    604      ‘fixed’ (or ‘nil’) is likely a better choice than ‘t’.
    605 
    606      The value can also be an integer, in which case the behavior
    607      depends on whether at least that many lines are left to display
    608      windows other than the menu window.  If that is the case, display
    609      the menu and preserve the size of that window.  Otherwise, allow
    610      resizing the menu window if the number is positive, or hide the
    611      menu if it is negative.
    612 
    613  -- User Option: transient-read-with-initial-input
    614      This option controls whether the last history element is used as
    615      the initial minibuffer input when reading the value of an infix
    616      argument from the user.  If ‘nil’, there is no initial input and
    617      the first element has to be accessed the same way as the older
    618      elements.
    619 
    620  -- User Option: transient-enable-popup-navigation
    621      This option controls whether navigation commands are enabled in the
    622      transient popup buffer.  If the value is ‘verbose’ (the default),
    623      brief documentation about the command under point is additionally
    624      show in the echo area.
    625 
    626      While a transient is active the transient popup buffer is not the
    627      current buffer, making it necessary to use dedicated commands to
    628      act on that buffer itself.  If this option is non-‘nil’, then the
    629      following features are available:
    630 
    631         • ‘<UP>’ moves the cursor to the previous suffix.
    632         • ‘<DOWN>’ moves the cursor to the next suffix.
    633         • ‘M-<RET>’ invokes the suffix the cursor is on.
    634         • ‘mouse-1’ invokes the clicked on suffix.
    635         • ‘C-s’ and ‘C-r’ start isearch in the popup buffer.
    636 
    637      By default ‘M-<RET>’ is bound to ‘transient-push-button’, instead
    638      of ‘<RET>’, because if a transient allows the invocation of
    639      non-suffixes, then it is likely, that you would want ‘<RET>’ to do
    640      what it would do if no transient were active."
    641 
    642  -- User Option: transient-display-buffer-action
    643      This option specifies the action used to display the transient
    644      popup buffer.  The transient popup buffer is displayed in a window
    645      using ‘(display-buffer BUFFER transient-display-buffer-action)’.
    646 
    647      The value of this option has the form ‘(FUNCTION . ALIST)’, where
    648      FUNCTION is a function or a list of functions.  Each such function
    649      should accept two arguments: a buffer to display and an alist of
    650      the same form as ALIST.  See *note (elisp)Choosing Window::, for
    651      details.
    652 
    653      The default is:
    654 
    655           (display-buffer-in-side-window
    656            (side . bottom)
    657            (dedicated . t)
    658            (inhibit-same-window . t))
    659 
    660      This displays the window at the bottom of the selected frame.  For
    661      alternatives see *note (elisp)Buffer Display Action Functions::,
    662      and *note (elisp)Buffer Display Action Alists::.
    663 
    664      Note that the buffer that was current before the transient buffer
    665      is shown should remain the current buffer.  Many suffix commands
    666      act on the thing at point, if appropriate, and if the transient
    667      buffer became the current buffer, then that would change what is at
    668      point.  To that effect ‘inhibit-same-window’ ensures that the
    669      selected window is not used to show the transient buffer.
    670 
    671      It may be possible to display the window in another frame, but
    672      whether that works in practice depends on the window-manager.  If
    673      the window manager selects the new window (Emacs frame), then that
    674      unfortunately changes which buffer is current.
    675 
    676      If you change the value of this option, then you might also want to
    677      change the value of ‘transient-mode-line-format’.
    678 
    679      This user option may be overridden if ‘:display-action’ is passed
    680      when creating a new prefix with ‘transient-define-prefix’.
    681 
    682 Accessibility Options
    683 ---------------------
    684 
    685  -- User Option: transient-force-single-column
    686      This option controls whether the use of a single column to display
    687      suffixes is enforced.  This might be useful for users with low
    688      vision who use large text and might otherwise have to scroll in two
    689      dimensions.
    690 
    691 Auxiliary Options
    692 -----------------
    693 
    694  -- User Option: transient-mode-line-format
    695      This option controls whether the transient popup buffer has a
    696      mode-line, separator line, or neither.
    697 
    698      If ‘nil’, then the buffer has no mode-line.  If the buffer is not
    699      displayed right above the echo area, then this probably is not a
    700      good value.
    701 
    702      If ‘line’ (the default) or a natural number, then the buffer has no
    703      mode-line, but a line is drawn in its place.  If a number is used,
    704      that specifies the thickness of the line.  On termcap frames we
    705      cannot draw lines, so there ‘line’ and numbers are synonyms for
    706      ‘nil’.
    707 
    708      The color of the line is used to indicate if non-suffixes are
    709      allowed and whether they exit the transient.  The foreground color
    710      of ‘transient-key-noop’ (if non-suffixes are disallowed),
    711      ‘transient-key-stay’ (if allowed and transient stays active), or
    712      ‘transient-key-exit’ (if allowed and they exit the transient) is
    713      used to draw the line.
    714 
    715      This user option may be overridden if ‘:mode-line-format’ is passed
    716      when creating a new prefix with ‘transient-define-prefix’.
    717 
    718      Otherwise this can be any mode-line format.  See *note (elisp)Mode
    719      Line Format::, for details.
    720 
    721  -- User Option: transient-semantic-coloring
    722      This option controls whether colors are used to indicate the
    723      transient behavior of commands.
    724 
    725      If non-‘nil’, then the key binding of each suffix is colorized to
    726      indicate whether it exits the transient state or not.  The color of
    727      the prefix is indicated using the line that is drawn when the value
    728      of ‘transient-mode-line-format’ is ‘line’.
    729 
    730  -- User Option: transient-highlight-mismatched-keys
    731      This option controls whether key bindings of infix commands that do
    732      not match the respective command-line argument should be
    733      highlighted.  For other infix commands this option has no effect.
    734 
    735      When this option is non-‘nil’, the key binding for an infix
    736      argument is highlighted when only a long argument (e.g.,
    737      ‘--verbose’) is specified but no shorthand (e.g., ‘-v’).  In the
    738      rare case that a shorthand is specified but the key binding does
    739      not match, then it is highlighted differently.
    740 
    741      Highlighting mismatched key bindings is useful when learning the
    742      arguments of the underlying command-line tool; you wouldn’t want to
    743      learn any short-hands that do not actually exist.
    744 
    745      The highlighting is done using one of the faces
    746      ‘transient-mismatched-key’ and ‘transient-nonstandard-key’.
    747 
    748  -- User Option: transient-substitute-key-function
    749      This function is used to modify key bindings.  If the value of this
    750      option is ‘nil’ (the default), then no substitution is performed.
    751 
    752      This function is called with one argument, the prefix object, and
    753      must return a key binding description, either the existing key
    754      description it finds in the ‘key’ slot, or the key description that
    755      replaces the prefix key.  It could be used to make other
    756      substitutions, but that is discouraged.
    757 
    758      For example, ‘=’ is hard to reach using my custom keyboard layout,
    759      so I substitute ‘(’ for that, which is easy to reach using a layout
    760      optimized for lisp.
    761 
    762           (setq transient-substitute-key-function
    763                 (lambda (obj)
    764                   (let ((key (oref obj key)))
    765                     (if (string-match "\\`\\(=\\)[a-zA-Z]" key)
    766                         (replace-match "(" t t key 1)
    767                       key))))
    768 
    769  -- User Option: transient-align-variable-pitch
    770      This option controls whether columns are aligned pixel-wise in the
    771      popup buffer.
    772 
    773      If this is non-‘nil’, then columns are aligned pixel-wise to
    774      support variable-pitch fonts.  Keys are not aligned, so you should
    775      use a fixed-pitch font for the ‘transient-key’ face.  Other key
    776      faces inherit from that face unless a theme is used that breaks
    777      that relationship.
    778 
    779      This option is intended for users who use a variable-pitch font for
    780      the ‘default’ face.
    781 
    782  -- User Option: transient-force-fixed-pitch
    783      This option controls whether to force the use of a monospaced font
    784      in popup buffer.  Even if you use a proportional font for the
    785      ‘default’ face, you might still want to use a monospaced font in
    786      transient’s popup buffer.  Setting this option to ‘t’ causes
    787      ‘default’ to be remapped to ‘fixed-pitch’ in that buffer.
    788 
    789 Developer Options
    790 -----------------
    791 
    792 These options are mainly intended for developers.
    793 
    794  -- User Option: transient-detect-key-conflicts
    795      This option controls whether key binding conflicts should be
    796      detected at the time the transient is invoked.  If so, this results
    797      in an error, which prevents the transient from being used.  Because
    798      of that, conflicts are ignored by default.
    799 
    800      Conflicts cannot be determined earlier, i.e., when the transient is
    801      being defined and when new suffixes are being added, because at
    802      that time there can be false-positives.  It is actually valid for
    803      multiple suffixes to share a common key binding, provided the
    804      predicates of those suffixes prevent that more than one of them is
    805      enabled at a time.
    806 
    807  -- User Option: transient-highlight-higher-levels
    808      This option controls whether suffixes that would not be available
    809      by default are highlighted.
    810 
    811      When non-‘nil’ then the descriptions of suffixes are highlighted if
    812      their level is above 4, the default of ‘transient-default-level’.
    813      Assuming you have set that variable to 7, this highlights all
    814      suffixes that won’t be available to users without them making the
    815      same customization.
    816 
    817 Hook Variables
    818 --------------
    819 
    820  -- Variable: transient-exit-hook
    821      This hook is run after a transient is exited.
    822 
    823  -- Variable: transient-setup-buffer-hook
    824      This hook is run when the transient buffer is being setup.  That
    825      buffer is current and empty when this hook is runs.
    826 
    827 
    828 File: transient.info,  Node: Modifying Existing Transients,  Next: Defining New Commands,  Prev: Usage,  Up: Top
    829 
    830 3 Modifying Existing Transients
    831 *******************************
    832 
    833 To an extent, transients can be customized interactively, see *note
    834 Enabling and Disabling Suffixes::.  This section explains how existing
    835 transients can be further modified non-interactively.  Let’s begin with
    836 an example:
    837 
    838      (transient-append-suffix 'magit-patch-apply "-3"
    839        '("-R" "Apply in reverse" "--reverse"))
    840 
    841    This inserts a new infix argument to toggle the ‘--reverse’ argument
    842 after the infix argument that toggles ‘-3’ in ‘magit-patch-apply’.
    843 
    844    The following functions share a few arguments:
    845 
    846    • PREFIX is a transient prefix command, a symbol.
    847 
    848    • SUFFIX is a transient infix or suffix specification in the same
    849      form as expected by ‘transient-define-prefix’.  Note that an infix
    850      is a special kind of suffix.  Depending on context “suffixes” means
    851      “suffixes (including infixes)” or “non-infix suffixes”.  Here it
    852      means the former.  See *note Suffix Specifications::.
    853 
    854      SUFFIX may also be a group in the same form as expected by
    855      ‘transient-define-prefix’.  See *note Group Specifications::.
    856 
    857    • LOC is a command, a key vector, a key description (a string as
    858      returned by ‘key-description’), or a list specifying coordinates
    859      (the last element may also be a command or key).  For example ‘(1 0
    860      -1)’ identifies the last suffix (‘-1’) of the first subgroup (‘0’)
    861      of the second group (‘1’).
    862 
    863      If LOC is a list of coordinates, then it can be used to identify a
    864      group, not just an individual suffix command.
    865 
    866      The function ‘transient-get-suffix’ can be useful to determine
    867      whether a certain coordination list identifies the suffix or group
    868      that you expect it to identify.  In hairy cases it may be necessary
    869      to look at the definition of the transient prefix command.
    870 
    871    These functions operate on the information stored in the
    872 ‘transient--layout’ property of the PREFIX symbol.  Suffix entries in
    873 that tree are not objects but have the form ‘(LEVEL CLASS PLIST)’, where
    874 PLIST should set at least ‘:key’, ‘:description’ and ‘:command’.
    875 
    876  -- Function: transient-insert-suffix prefix loc suffix &optional
    877           keep-other
    878  -- Function: transient-append-suffix prefix loc suffix &optional
    879           keep-other
    880      These functions insert the suffix or group SUFFIX into PREFIX
    881      before or after LOC.
    882 
    883      Conceptually adding a binding to a transient prefix is similar to
    884      adding a binding to a keymap, but this is complicated by the fact
    885      that multiple suffix commands can be bound to the same key,
    886      provided they are never active at the same time, see *note
    887      Predicate Slots::.
    888 
    889      Unfortunately both false-positives and false-negatives are
    890      possible.  To deal with the former use non-‘nil’ KEEP-OTHER.  To
    891      deal with the latter remove the conflicting binding explicitly.
    892 
    893  -- Function: transient-replace-suffix prefix loc suffix
    894      This function replaces the suffix or group at LOC in PREFIX with
    895      suffix or group SUFFIX.
    896 
    897  -- Function: transient-remove-suffix prefix loc
    898      This function removes the suffix or group at LOC in PREFIX.
    899 
    900  -- Function: transient-get-suffix prefix loc
    901      This function returns the suffix or group at LOC in PREFIX.  The
    902      returned value has the form mentioned above.
    903 
    904  -- Function: transient-suffix-put prefix loc prop value
    905      This function edits the suffix or group at LOC in PREFIX, by
    906      setting the PROP of its plist to VALUE.
    907 
    908    Most of these functions do not signal an error if they cannot perform
    909 the requested modification.  The functions that insert new suffixes show
    910 a warning if LOC cannot be found in PREFIX without signaling an error.
    911 The reason for doing it like this is that establishing a key binding
    912 (and that is what we essentially are trying to do here) should not
    913 prevent the rest of the configuration from loading.  Among these
    914 functions only ‘transient-get-suffix’ and ‘transient-suffix-put’ may
    915 signal an error.
    916 
    917 
    918 File: transient.info,  Node: Defining New Commands,  Next: Classes and Methods,  Prev: Modifying Existing Transients,  Up: Top
    919 
    920 4 Defining New Commands
    921 ***********************
    922 
    923 * Menu:
    924 
    925 * Technical Introduction::
    926 * Defining Transients::
    927 * Binding Suffix and Infix Commands::
    928 * Defining Suffix and Infix Commands::
    929 * Using Infix Arguments::
    930 * Current Suffix Command::
    931 * Current Prefix Command::
    932 * Transient State::
    933 
    934 
    935 File: transient.info,  Node: Technical Introduction,  Next: Defining Transients,  Up: Defining New Commands
    936 
    937 4.1 Technical Introduction
    938 ==========================
    939 
    940 Taking inspiration from prefix keys and prefix arguments, Transient
    941 implements a similar abstraction involving a prefix command, infix
    942 arguments and suffix commands.
    943 
    944    When the user calls a transient prefix command, a transient
    945 (temporary) keymap is activated, which binds the transient’s infix and
    946 suffix commands, and functions that control the transient state are
    947 added to ‘pre-command-hook’ and ‘post-command-hook’.  The available
    948 suffix and infix commands and their state are shown in a popup buffer
    949 until the transient state is exited by invoking a suffix command.
    950 
    951    Calling an infix command causes its value to be changed.  How that is
    952 done depends on the type of the infix command.  The simplest case is an
    953 infix command that represents a command-line argument that does not take
    954 a value.  Invoking such an infix command causes the switch to be toggled
    955 on or off.  More complex infix commands may read a value from the user,
    956 using the minibuffer.
    957 
    958    Calling a suffix command usually causes the transient to be exited;
    959 the transient keymaps and hook functions are removed, the popup buffer
    960 no longer shows information about the (no longer bound) suffix commands,
    961 the values of some public global variables are set, while some internal
    962 global variables are unset, and finally the command is actually called.
    963 Suffix commands can also be configured to not exit the transient.
    964 
    965    A suffix command can, but does not have to, use the infix arguments
    966 in much the same way any command can choose to use or ignore the prefix
    967 arguments.  For a suffix command that was invoked from a transient, the
    968 variable ‘transient-current-suffixes’ and the function ‘transient-args’
    969 serve about the same purpose as the variables ‘prefix-arg’ and
    970 ‘current-prefix-arg’ do for any command that was called after the prefix
    971 arguments have been set using a command such as ‘universal-argument’.
    972 
    973    Transient can be used to implement simple “command dispatchers”.  The
    974 main benefit then is that the user can see all the available commands in
    975 a popup buffer, which can be thought of as a “menu”.  That is useful by
    976 itself because it frees the user from having to remember all the keys
    977 that are valid after a certain prefix key or command.  Magit’s
    978 ‘magit-dispatch’ (on ‘C-x M-g’) command is an example of using Transient
    979 to merely implement a command dispatcher.
    980 
    981    In addition to that, Transient also allows users to interactively
    982 pass arguments to commands.  These arguments can be much more complex
    983 than what is reasonable when using prefix arguments.  There is a limit
    984 to how many aspects of a command can be controlled using prefix
    985 arguments.  Furthermore, what a certain prefix argument means for
    986 different commands can be completely different, and users have to read
    987 documentation to learn and then commit to memory what a certain prefix
    988 argument means to a certain command.
    989 
    990    Transient suffix commands, on the other hand, can accept dozens of
    991 different arguments without the user having to remember anything.  When
    992 using Transient, one can call a command with arguments that are just as
    993 complex as when calling the same function non-interactively from Lisp.
    994 
    995    Invoking a transient suffix command with arguments is similar to
    996 invoking a command in a shell with command-line completion and history
    997 enabled.  One benefit of the Transient interface is that it remembers
    998 history not only on a global level (“this command was invoked using
    999 these arguments, and previously it was invoked using those other
   1000 arguments”), but also remembers the values of individual arguments
   1001 independently.  See *note Using History::.
   1002 
   1003    After a transient prefix command is invoked, ‘C-h KEY’ can be used to
   1004 show the documentation for the infix or suffix command that ‘KEY’ is
   1005 bound to (see *note Getting Help for Suffix Commands::), and infixes and
   1006 suffixes can be removed from the transient using ‘C-x l KEY’.  Infixes
   1007 and suffixes that are disabled by default can be enabled the same way.
   1008 See *note Enabling and Disabling Suffixes::.
   1009 
   1010    Transient ships with support for a few different types of specialized
   1011 infix commands.  A command that sets a command line option, for example,
   1012 has different needs than a command that merely toggles a boolean flag.
   1013 Additionally, Transient provides abstractions for defining new types,
   1014 which the author of Transient did not anticipate (or didn’t get around
   1015 to implementing yet).
   1016 
   1017    Note that suffix commands also support regular prefix arguments.  A
   1018 suffix command may even be called with both infix and prefix arguments
   1019 at the same time.  If you invoke a command as a suffix of a transient
   1020 prefix command, but also want to pass prefix arguments to it, then first
   1021 invoke the prefix command, and only after doing that invoke the prefix
   1022 arguments, before finally invoking the suffix command.  If you instead
   1023 began by providing the prefix arguments, then those would apply to the
   1024 prefix command, not the suffix command.  Likewise, if you want to change
   1025 infix arguments before invoking a suffix command with prefix arguments,
   1026 then change the infix arguments before invoking the prefix arguments.
   1027 In other words, regular prefix arguments always apply to the next
   1028 command, and since transient prefix, infix and suffix commands are just
   1029 regular commands, the same applies to them.  (Regular prefix keys behave
   1030 differently because they are not commands at all, instead they are just
   1031 incomplete key sequences, and those cannot be interrupted with prefix
   1032 commands.)
   1033 
   1034 
   1035 File: transient.info,  Node: Defining Transients,  Next: Binding Suffix and Infix Commands,  Prev: Technical Introduction,  Up: Defining New Commands
   1036 
   1037 4.2 Defining Transients
   1038 =======================
   1039 
   1040 A transient consists of a prefix command and at least one suffix
   1041 command, though usually a transient has several infix and suffix
   1042 commands.  The below macro defines the transient prefix command *and*
   1043 binds the transient’s infix and suffix commands.  In other words, it
   1044 defines the complete transient, not just the transient prefix command
   1045 that is used to invoke that transient.
   1046 
   1047  -- Macro: transient-define-prefix name arglist [docstring] [keyword
   1048           value]... group... [body...]
   1049      This macro defines NAME as a transient prefix command and binds the
   1050      transient’s infix and suffix commands.
   1051 
   1052      ARGLIST are the arguments that the prefix command takes.  DOCSTRING
   1053      is the documentation string and is optional.
   1054 
   1055      These arguments can optionally be followed by keyword-value pairs.
   1056      Each key has to be a keyword symbol, either ‘:class’ or a keyword
   1057      argument supported by the constructor of that class.  The
   1058      ‘transient-prefix’ class is used if the class is not specified
   1059      explicitly.
   1060 
   1061      GROUPs add key bindings for infix and suffix commands and specify
   1062      how these bindings are presented in the popup buffer.  At least one
   1063      GROUP has to be specified.  See *note Binding Suffix and Infix
   1064      Commands::.
   1065 
   1066      The BODY is optional.  If it is omitted, then ARGLIST is ignored
   1067      and the function definition becomes:
   1068 
   1069           (lambda ()
   1070             (interactive)
   1071             (transient-setup 'NAME))
   1072 
   1073      If BODY is specified, then it must begin with an ‘interactive’ form
   1074      that matches ARGLIST, and it must call ‘transient-setup’.  It may,
   1075      however, call that function only when some condition is satisfied.
   1076 
   1077      All transients have a (possibly ‘nil’) value, which is exported
   1078      when suffix commands are called, so that they can consume that
   1079      value.  For some transients it might be necessary to have a sort of
   1080      secondary value, called a “scope”.  Such a scope would usually be
   1081      set in the command’s ‘interactive’ form and has to be passed to the
   1082      setup function:
   1083 
   1084           (transient-setup 'NAME nil nil :scope SCOPE)
   1085 
   1086      For example, the scope of the ‘magit-branch-configure’ transient is
   1087      the branch whose variables are being configured.
   1088 
   1089 
   1090 File: transient.info,  Node: Binding Suffix and Infix Commands,  Next: Defining Suffix and Infix Commands,  Prev: Defining Transients,  Up: Defining New Commands
   1091 
   1092 4.3 Binding Suffix and Infix Commands
   1093 =====================================
   1094 
   1095 The macro ‘transient-define-prefix’ is used to define a transient.  This
   1096 defines the actual transient prefix command (see *note Defining
   1097 Transients::) and adds the transient’s infix and suffix bindings, as
   1098 described below.
   1099 
   1100    Users and third-party packages can add additional bindings using
   1101 functions such as ‘transient-insert-suffix’ (see *note Modifying
   1102 Existing Transients::).  These functions take a “suffix specification”
   1103 as one of their arguments, which has the same form as the specifications
   1104 used in ‘transient-define-prefix’.
   1105 
   1106 * Menu:
   1107 
   1108 * Group Specifications::
   1109 * Suffix Specifications::
   1110 
   1111 
   1112 File: transient.info,  Node: Group Specifications,  Next: Suffix Specifications,  Up: Binding Suffix and Infix Commands
   1113 
   1114 4.3.1 Group Specifications
   1115 --------------------------
   1116 
   1117 The suffix and infix commands of a transient are organized in groups.
   1118 The grouping controls how the descriptions of the suffixes are outlined
   1119 visually but also makes it possible to set certain properties for a set
   1120 of suffixes.
   1121 
   1122    Several group classes exist, some of which organize suffixes in
   1123 subgroups.  In most cases the class does not have to be specified
   1124 explicitly, but see *note Group Classes::.
   1125 
   1126    Groups are specified in the call to ‘transient-define-prefix’, using
   1127 vectors.  Because groups are represented using vectors, we cannot use
   1128 square brackets to indicate an optional element and instead use curly
   1129 brackets to do the latter.
   1130 
   1131    Group specifications then have this form:
   1132 
   1133      [{LEVEL} {DESCRIPTION} {KEYWORD VALUE}... ELEMENT...]
   1134 
   1135    The LEVEL is optional and defaults to 4.  See *note Enabling and
   1136 Disabling Suffixes::.
   1137 
   1138    The DESCRIPTION is optional.  If present, it is used as the heading
   1139 of the group.
   1140 
   1141    The KEYWORD-VALUE pairs are optional.  Each keyword has to be a
   1142 keyword symbol, either ‘:class’ or a keyword argument supported by the
   1143 constructor of that class.
   1144 
   1145    • One of these keywords, ‘:description’, is equivalent to specifying
   1146      DESCRIPTION at the very beginning of the vector.  The
   1147      recommendation is to use ‘:description’ if some other keyword is
   1148      also used, for consistency, or DESCRIPTION otherwise, because it
   1149      looks better.
   1150 
   1151    • Likewise ‘:level’ is equivalent to LEVEL.
   1152 
   1153    • Other important keywords include the ‘:if...’ and ‘:inapt-if...’
   1154      keywords.  These keywords control whether the group is available in
   1155      a certain situation.
   1156 
   1157      For example, one group of the ‘magit-rebase’ transient uses ‘:if
   1158      magit-rebase-in-progress-p’, which contains the suffixes that are
   1159      useful while rebase is already in progress; and another that uses
   1160      ‘:if-not magit-rebase-in-progress-p’, which contains the suffixes
   1161      that initiate a rebase.
   1162 
   1163      These predicates can also be used on individual suffixes and are
   1164      only documented once, see *note Predicate Slots::.
   1165 
   1166    • The value of ‘:hide’, if non-‘nil’, is a predicate that controls
   1167      whether the group is hidden by default.  The key bindings for
   1168      suffixes of a hidden group should all use the same prefix key.
   1169      Pressing that prefix key should temporarily show the group and its
   1170      suffixes, which assumes that a predicate like this is used:
   1171 
   1172           (lambda ()
   1173             (eq (car transient--redisplay-key)
   1174                 ?\C-c)) ; the prefix key shared by all bindings
   1175 
   1176    • The value of ‘:setup-children’, if non-‘nil’, is a function that
   1177      takes one argument, a potentially list of children, and must return
   1178      a list of children or an empty list.  This can either be used to
   1179      somehow transform the group’s children that were defined the normal
   1180      way, or to dynamically create the children from scratch.
   1181 
   1182      The returned children must have the same form as stored in the
   1183      prefix’s ‘transient--layout’ property, but it is often more
   1184      convenient to use the same form as understood by
   1185      ‘transient-define-prefix’, described below.  If you use the latter
   1186      approach, you can use the ‘transient-parse-suffixes’ and
   1187      ‘transient-parse-suffix’ functions to transform them from the
   1188      convenient to the expected form.  Depending on the used group
   1189      class, ‘transient-parse-suffixes’’s SUFFIXES must be a list of
   1190      group vectors (for ‘transient-columns’) or a list of suffix lists
   1191      (for all other group classes).
   1192 
   1193      If you explicitly specify children and then transform them using
   1194      ‘:setup-children’, then the class of the group is determined as
   1195      usual, based on explicitly specified children.
   1196 
   1197      If you do not explicitly specify children and thus rely solely on
   1198      ‘:setup-children’, then you must specify the class using ‘:class’.
   1199      For backward compatibility, if you fail to do so,
   1200      ‘transient-column’ is used and a warning is displayed.  This
   1201      warning will eventually be replaced with an error.
   1202 
   1203           (transient-define-prefix my-finder-by-keyword ()
   1204             "Select a keyword and list matching packages."
   1205             ;; The real `finder-by-keyword' is more convenient
   1206             ;; of course, but that is not the point here.
   1207             [:class transient-columns
   1208              :setup-children
   1209              (lambda (_)
   1210                (transient-parse-suffixes
   1211                 'my-finder-by-keyword
   1212                 (let ((char (1- ?A)))
   1213                   (mapcar                  ; a list ...
   1214                    (lambda (partition)
   1215                      (vconcat              ; of group vectors ...
   1216                       (mapcar (lambda (elt)
   1217                                 (let ((keyword (symbol-name (car elt))))
   1218                                            ; ... where each suffix is a list
   1219                                   (list (format "%c" (cl-incf char))
   1220                                         keyword
   1221                                         (lambda ()
   1222                                           (interactive)
   1223                                           (finder-list-matches keyword)))))
   1224                               partition)))
   1225                    (seq-partition finder-known-keywords 7)))))])
   1226 
   1227    • The boolean ‘:pad-keys’ argument controls whether keys of all
   1228      suffixes contained in a group are right padded, effectively
   1229      aligning the descriptions.
   1230 
   1231    The ELEMENTs are either all subgroups, or all suffixes and strings.
   1232 (At least currently no group type exists that would allow mixing
   1233 subgroups with commands at the same level, though in principle there is
   1234 nothing that prevents that.)
   1235 
   1236    If the ELEMENTs are not subgroups, then they can be a mixture of
   1237 lists, which specify commands, and strings.  Strings are inserted
   1238 verbatim into the buffer.  The empty string can be used to insert gaps
   1239 between suffixes, which is particularly useful if the suffixes are
   1240 outlined as a table.
   1241 
   1242    Inside group specifications, including inside contained suffix
   1243 specifications, nothing has to be quoted and quoting anyway is invalid.
   1244 The value following a keyword, can be explicitly unquoted using ‘,’.
   1245 This feature is experimental and should be avoided.
   1246 
   1247    The form of suffix specifications is documented in the next node.
   1248 
   1249 
   1250 File: transient.info,  Node: Suffix Specifications,  Prev: Group Specifications,  Up: Binding Suffix and Infix Commands
   1251 
   1252 4.3.2 Suffix Specifications
   1253 ---------------------------
   1254 
   1255 A transient’s suffix and infix commands are bound when the transient
   1256 prefix command is defined using ‘transient-define-prefix’, see *note
   1257 Defining Transients::.  The commands are organized into groups, see
   1258 *note Group Specifications::.  Here we describe the form used to bind an
   1259 individual suffix command.
   1260 
   1261    The same form is also used when later binding additional commands
   1262 using functions such as ‘transient-insert-suffix’, see *note Modifying
   1263 Existing Transients::.
   1264 
   1265    Note that an infix is a special kind of suffix.  Depending on context
   1266 “suffixes” means “suffixes (including infixes)” or “non-infix suffixes”.
   1267 Here it means the former.
   1268 
   1269    Suffix specifications have this form:
   1270 
   1271      ([LEVEL] [KEY [DESCRIPTION]] COMMAND|ARGUMENT [KEYWORD VALUE]...)
   1272 
   1273    LEVEL, KEY and DESCRIPTION can also be specified using the KEYWORDs
   1274 ‘:level’, ‘:key’ and ‘:description’.  If the object that is associated
   1275 with COMMAND sets these properties, then they do not have to be
   1276 specified here.  You can however specify them here anyway, possibly
   1277 overriding the object’s values just for the binding inside this
   1278 transient.
   1279 
   1280    • LEVEL is the suffix level, an integer between 1 and 7.  See *note
   1281      Enabling and Disabling Suffixes::.
   1282 
   1283    • KEY is the key binding, either a vector or key description string.
   1284 
   1285    • DESCRIPTION is the description, either a string or a function that
   1286      takes zero or one arguments (the suffix object) and returns a
   1287      string.  The function should be a lambda expression to avoid
   1288      ambiguity.  In some cases a symbol that is bound as a function
   1289      would also work but to be safe you should use ‘:description’ in
   1290      that case.
   1291 
   1292    The next element is either a command or an argument.  This is the
   1293 only argument that is mandatory in all cases.
   1294 
   1295    • COMMAND should be a symbol that is bound as a function, which has
   1296      to be defined or at least autoloaded as a command by the time the
   1297      containing prefix command is invoked.
   1298 
   1299      Any command will do; it does not need to have an object associated
   1300      with it (as would be the case if ‘transient-define-suffix’ or
   1301      ‘transient-define-infix’ were used to define it).
   1302 
   1303      COMMAND can also be a ‘lambda’ expression.
   1304 
   1305      As mentioned above, the object that is associated with a command
   1306      can be used to set the default for certain values that otherwise
   1307      have to be set in the suffix specification.  Therefore if there is
   1308      no object, then you have to make sure to specify the KEY and the
   1309      DESCRIPTION.
   1310 
   1311      As a special case, if you want to add a command that might be
   1312      neither defined nor autoloaded, you can use a workaround like:
   1313 
   1314           (transient-insert-suffix 'some-prefix "k"
   1315             '("!" "Ceci n'est pas une commande" no-command
   1316               :if (lambda () (featurep 'no-library))))
   1317 
   1318      Instead of ‘featurep’ you could also use ‘require’ with a non-‘nil’
   1319      value for NOERROR.
   1320 
   1321    • The mandatory argument can also be a command-line argument, a
   1322      string.  In that case an anonymous command is defined and bound.
   1323 
   1324      Instead of a string, this can also be a list of two strings, in
   1325      which case the first string is used as the short argument (which
   1326      can also be specified using ‘:shortarg’) and the second as the long
   1327      argument (which can also be specified using ‘:argument’).
   1328 
   1329      Only the long argument is displayed in the popup buffer.  See
   1330      ‘transient-detect-key-conflicts’ for how the short argument may be
   1331      used.
   1332 
   1333      Unless the class is specified explicitly, the appropriate class is
   1334      guessed based on the long argument.  If the argument ends with ‘=’
   1335      (e.g., ‘--format=’) then ‘transient-option’ is used, otherwise
   1336      ‘transient-switch’.
   1337 
   1338    Finally, details can be specified using optional KEYWORD-VALUE pairs.
   1339 Each keyword has to be a keyword symbol, either ‘:class’ or a keyword
   1340 argument supported by the constructor of that class.  See *note Suffix
   1341 Slots::.
   1342 
   1343 
   1344 File: transient.info,  Node: Defining Suffix and Infix Commands,  Next: Using Infix Arguments,  Prev: Binding Suffix and Infix Commands,  Up: Defining New Commands
   1345 
   1346 4.4 Defining Suffix and Infix Commands
   1347 ======================================
   1348 
   1349 Note that an infix is a special kind of suffix.  Depending on context
   1350 “suffixes” means “suffixes (including infixes)” or “non-infix suffixes”.
   1351 
   1352  -- Macro: transient-define-suffix name arglist [docstring] [keyword
   1353           value]... body...
   1354      This macro defines NAME as a transient suffix command.
   1355 
   1356      ARGLIST are the arguments that the command takes.  DOCSTRING is the
   1357      documentation string and is optional.
   1358 
   1359      These arguments can optionally be followed by keyword-value pairs.
   1360      Each keyword has to be a keyword symbol, either ‘:class’ or a
   1361      keyword argument supported by the constructor of that class.  The
   1362      ‘transient-suffix’ class is used if the class is not specified
   1363      explicitly.
   1364 
   1365      The BODY must begin with an ‘interactive’ form that matches
   1366      ARGLIST.  The infix arguments are usually accessed by using
   1367      ‘transient-args’ inside ‘interactive’.
   1368 
   1369  -- Macro: transient-define-infix name arglist [docstring] [keyword
   1370           value]...
   1371      This macro defines NAME as a transient infix command.
   1372 
   1373      ARGLIST is always ignored (but mandatory never-the-less) and
   1374      reserved for future use.  DOCSTRING is the documentation string and
   1375      is optional.
   1376 
   1377      At least one key-value pair is required.  All transient infix
   1378      commands are ‘equal’ to each other (but not ‘eq’).  It is
   1379      meaningless to define an infix command, without providing at least
   1380      one keyword argument (usually ‘:argument’ or ‘:variable’, depending
   1381      on the class).  The suffix class defaults to ‘transient-switch’ and
   1382      can be set using the ‘:class’ keyword.
   1383 
   1384      The function definition is always:
   1385 
   1386           (lambda ()
   1387             (interactive)
   1388             (let ((obj (transient-suffix-object)))
   1389               (transient-infix-set obj (transient-infix-read obj)))
   1390             (transient--show))
   1391 
   1392      ‘transient-infix-read’ and ‘transient-infix-set’ are generic
   1393      functions.  Different infix commands behave differently because the
   1394      concrete methods are different for different infix command classes.
   1395      In rare cases the above command function might not be suitable,
   1396      even if you define your own infix command class.  In that case you
   1397      have to use ‘transient-define-suffix’ to define the infix command
   1398      and use ‘t’ as the value of the ‘:transient’ keyword.
   1399 
   1400  -- Macro: transient-define-argument name arglist [docstring] [keyword
   1401           value]...
   1402      This macro defines NAME as a transient infix command.
   1403 
   1404      This is an alias for ‘transient-define-infix’.  Only use this alias
   1405      to define an infix command that actually sets an infix argument.
   1406      To define an infix command that, for example, sets a variable, use
   1407      ‘transient-define-infix’ instead.
   1408 
   1409 
   1410 File: transient.info,  Node: Using Infix Arguments,  Next: Current Suffix Command,  Prev: Defining Suffix and Infix Commands,  Up: Defining New Commands
   1411 
   1412 4.5 Using Infix Arguments
   1413 =========================
   1414 
   1415 The functions and the variables described below allow suffix commands to
   1416 access the value of the transient from which they were invoked; which is
   1417 the value of its infix arguments.  These variables are set when the user
   1418 invokes a suffix command that exits the transient, but before actually
   1419 calling the command.
   1420 
   1421    When returning to the command-loop after calling the suffix command,
   1422 the arguments are reset to ‘nil’ (which causes the function to return
   1423 ‘nil’ too).
   1424 
   1425    Like for Emacs’s prefix arguments, it is advisable, but not
   1426 mandatory, to access the infix arguments inside the command’s
   1427 ‘interactive’ form.  The preferred way of doing that is to call the
   1428 ‘transient-args’ function, which for infix arguments serves about the
   1429 same purpose as ‘prefix-arg’ serves for prefix arguments.
   1430 
   1431  -- Function: transient-args prefix
   1432      This function returns the value of the transient prefix command
   1433      PREFIX.
   1434 
   1435      If the current command was invoked from the transient prefix
   1436      command PREFIX, then it returns the active infix arguments.  If the
   1437      current command was not invoked from PREFIX, then it returns the
   1438      set, saved or default value for PREFIX.
   1439 
   1440  -- Function: transient-get-value
   1441      This function returns the value of the current prefix.
   1442 
   1443      This is mostly intended for internal use, but may also be of use in
   1444      ‘transient-set-value’ and ‘transient-save-value’ methods.  Unlike
   1445      ‘transient-args’, this does not include the values of suffixes
   1446      whose ‘unsavable’ slot is non-‘nil’.
   1447 
   1448  -- Function: transient-arg-value arg args
   1449      This function returns the value of ARG as it appears in ARGS.
   1450 
   1451      For a switch a boolean is returned.  For an option the value is
   1452      returned as a string, using the empty string for the empty value,
   1453      or ‘nil’ if the option does not appear in ARGS.
   1454 
   1455  -- Function: transient-suffixes prefix
   1456      This function returns the suffixes of the transient prefix command
   1457      PREFIX.  This is a list of objects.  This function should only be
   1458      used if you need the objects (as opposed to just their values) and
   1459      if the current command is not being invoked from PREFIX.
   1460 
   1461 
   1462 File: transient.info,  Node: Current Suffix Command,  Next: Current Prefix Command,  Prev: Using Infix Arguments,  Up: Defining New Commands
   1463 
   1464 4.6 Current Suffix Command
   1465 ==========================
   1466 
   1467  -- Function: transient-suffix-object command
   1468      This function returns the object associated with the current suffix
   1469      command.
   1470 
   1471      Each suffix commands is associated with an object, which holds
   1472      additional information about the suffix, such as its value (in the
   1473      case of an infix command, which is a kind of suffix command).
   1474 
   1475      This function is intended to be called by infix commands, which are
   1476      usually aliases of ‘transient--default-infix-command’, which is
   1477      defined like this:
   1478 
   1479           (defun transient--default-infix-command ()
   1480             (interactive)
   1481             (let ((obj (transient-suffix-object)))
   1482               (transient-infix-set obj (transient-infix-read obj)))
   1483             (transient--show))
   1484 
   1485      (User input is read outside of ‘interactive’ to prevent the command
   1486      from being added to ‘command-history’.)
   1487 
   1488      Such commands need to be able to access their associated object to
   1489      guide how ‘transient-infix-read’ reads the new value and to store
   1490      the read value.  Other suffix commands (including non-infix
   1491      commands) may also need the object to guide their behavior.
   1492 
   1493      This function attempts to return the object associated with the
   1494      current suffix command even if the suffix command was not invoked
   1495      from a transient.  (For some suffix command that is a valid thing
   1496      to do, for others it is not.)  In that case ‘nil’ may be returned,
   1497      if the command was not defined using one of the macros intended to
   1498      define such commands.
   1499 
   1500      The optional argument COMMAND is intended for internal use.  If you
   1501      are contemplating using it in your own code, then you should
   1502      probably use this instead:
   1503 
   1504           (get COMMAND 'transient--suffix)
   1505 
   1506  -- Variable: transient-current-suffixes
   1507      The suffixes of the transient from which this suffix command was
   1508      invoked.  This is a list of objects.  Usually it is sufficient to
   1509      instead use the function ‘transient-args’, which returns a list of
   1510      values.  In complex cases it might be necessary to use this
   1511      variable instead, i.e., if you need access to information beside
   1512      the value.
   1513 
   1514 
   1515 File: transient.info,  Node: Current Prefix Command,  Next: Transient State,  Prev: Current Suffix Command,  Up: Defining New Commands
   1516 
   1517 4.7 Current Prefix Command
   1518 ==========================
   1519 
   1520  -- Function: transient-prefix-object
   1521      This function returns the current prefix as an object.
   1522 
   1523      While a transient is being setup or refreshed (which involves
   1524      preparing its suffixes) the variable ‘transient--prefix’ can be
   1525      used to access the prefix object.  Thus this is what has to be used
   1526      in suffix methods such as ‘transient-format-description’, and in
   1527      object-specific functions that are stored in suffix slots such as
   1528      ‘description’.
   1529 
   1530      When a suffix command is invoked (i.e., in its ‘interactive’ form
   1531      and function body) then the variable ‘transient-current-prefix’ has
   1532      to be used instead.
   1533 
   1534      Two distinct variables are needed, because any prefix may itself be
   1535      used as a suffix of another prefix, and such sub-prefixes have to
   1536      be able to tell themselves apart from the prefix they were invoked
   1537      from.
   1538 
   1539      Regular suffix commands, which are not prefixes, do not have to
   1540      concern themselves with this distinction, so they can use this
   1541      function instead.  In the context of a plain suffix, it always
   1542      returns the value of the appropriate variable.
   1543 
   1544  -- Variable: transient-current-prefix
   1545      The transient from which this suffix command was invoked.  The
   1546      value is a ‘transient-prefix’ object, which holds information
   1547      associated with the transient prefix command.
   1548 
   1549  -- Variable: transient-current-command
   1550      The transient from which this suffix command was invoked.  The
   1551      value is a symbol, the transient prefix command.
   1552 
   1553  -- Function: transient-active-prefix &optional prefixes
   1554      This function returns the active transient object.  It returns
   1555      ‘nil’ if there is no active transient, if the transient buffer
   1556      isn’t shown, and while the active transient is suspended (e.g.,
   1557      while the minibuffer is in use).
   1558 
   1559      Unlike ‘transient-current-prefix’, which is only ever non-‘nil’ in
   1560      code that is run directly by a command that is invoked while a
   1561      transient is current, this function is also suitable for use in
   1562      asynchronous code, such as timers and callbacks (this function’s
   1563      main use-case).
   1564 
   1565      If optional PREFIXES is non-‘nil’, it must be a prefix command
   1566      symbol or a list of symbols, in which case the active transient
   1567      object is only returned if it matches one of the PREFIXES.
   1568 
   1569 
   1570 File: transient.info,  Node: Transient State,  Prev: Current Prefix Command,  Up: Defining New Commands
   1571 
   1572 4.8 Transient State
   1573 ===================
   1574 
   1575 Invoking a transient prefix command “activates” the respective
   1576 transient, i.e., it puts a transient keymap into effect, which binds the
   1577 transient’s infix and suffix commands.
   1578 
   1579    The default behavior while a transient is active is as follows:
   1580 
   1581    • Invoking an infix command does not affect the transient state; the
   1582      transient remains active.
   1583 
   1584    • Invoking a (non-infix) suffix command “deactivates” the transient
   1585      state by removing the transient keymap and performing some
   1586      additional cleanup.
   1587 
   1588    • Invoking a command that is bound in a keymap other than the
   1589      transient keymap is disallowed and trying to do so results in a
   1590      warning.  This does not “deactivate” the transient.
   1591 
   1592    The behavior can be changed for all suffixes of a particular prefix
   1593 and/or for individual suffixes.  The values should nearly always be
   1594 booleans, but certain functions, called “pre-commands”, can also be
   1595 used.  These functions are named ‘transient--do-VERB’, and the symbol
   1596 ‘VERB’ can be used as a shorthand.
   1597 
   1598    A boolean is interpreted as answering the question "does the
   1599 transient stay active, when this command is invoked?"  ‘t’ means that
   1600 the transient stays active, while ‘nil’ means that invoking the command
   1601 exits the transient.
   1602 
   1603    Note that when the suffix is a “sub-prefix”, invoking that command
   1604 always activates that sub-prefix, causing the outer prefix to no longer
   1605 be active and displayed.  Here ‘t’ means that when you exit the inner
   1606 prefix, then the outer prefix becomes active again, while ‘nil’ means
   1607 that all outer prefixes are exited at once.
   1608 
   1609    • The behavior for non-suffixes can be set for a particular prefix,
   1610      by the prefix’s ‘transient-non-suffix’ slot to a boolean, a
   1611      suitable pre-command function, or a shorthand for such a function.
   1612      See *note Pre-commands for Non-Suffixes::.
   1613 
   1614    • The common behavior for the suffixes of a particular prefix can be
   1615      set using the prefix’s ‘transient-suffixes’ slot.
   1616 
   1617      The value specified in this slot does *not* affect infixes.
   1618      Because it affects both regular suffixes as well as sub-prefixes,
   1619      which have different needs, it is best to avoid explicitly
   1620      specifying a function.
   1621 
   1622    • The behavior of an individual suffix can be changed using its
   1623      ‘transient’ slot.  While it is usually best to use a boolean, for
   1624      this slot it can occasionally make sense to specify a function
   1625      explicitly.
   1626 
   1627      Note that this slot can be set when defining a suffix command using
   1628      ‘transient-define-suffix’ and/or in the definition of the prefix.
   1629      If set in both places, then the latter takes precedence, as usual.
   1630 
   1631    The available pre-command functions are documented in the following
   1632 sub-sections.  They are called by ‘transient--pre-command’, a function
   1633 on ‘pre-command-hook’, and the value that they return determines whether
   1634 the transient is exited.  To do so the value of one of the constants
   1635 ‘transient--exit’ or ‘transient--stay’ is used (that way we don’t have
   1636 to remember if ‘t’ means “exit” or “stay”).
   1637 
   1638    Additionally, these functions may change the value of ‘this-command’
   1639 (which explains why they have to be called using ‘pre-command-hook’),
   1640 call ‘transient-export’, ‘transient--stack-zap’ or
   1641 ‘transient--stack-push’; and set the values of ‘transient--exitp’,
   1642 ‘transient--helpp’ or ‘transient--editp’.
   1643 
   1644    For completeness sake, some notes about complications:
   1645 
   1646    • The transient-ness of certain built-in suffix commands is specified
   1647      using ‘transient-predicate-map’.  This is a special keymap, which
   1648      binds commands to pre-commands (as opposed to keys to commands) and
   1649      takes precedence over the prefix’s ‘transient-suffix’ slot, but not
   1650      the suffix’s ‘transient’ slot.
   1651 
   1652    • While a sub-prefix is active we nearly always want ‘C-g’ to take
   1653      the user back to the “super-prefix”, even when the other suffixes
   1654      don’t do that.  However, in rare cases this may not be desirable,
   1655      and that makes the following complication necessary:
   1656 
   1657      For ‘transient-suffix’ objects the ‘transient’ slot is unbound.  We
   1658      can ignore that for the most part because ‘nil’ and the slot being
   1659      unbound are treated as equivalent, and mean “do exit”.  That isn’t
   1660      actually true for suffixes that are sub-prefixes though.  For such
   1661      suffixes unbound means “do exit but allow going back”, which is the
   1662      default, while ‘nil’ means “do exit permanently”, which requires
   1663      that slot to be explicitly set to that value.
   1664 
   1665 Pre-commands for Infixes
   1666 ------------------------
   1667 
   1668 The default for infixes is ‘transient--do-stay’.  This is also the only
   1669 function that makes sense for infixes, which is why this predicate is
   1670 used even if the value of the prefix’s ‘transient-suffix’ slot is ‘t’.
   1671 In extremely rare cases, one might want to use something else, which can
   1672 be done by setting the infix’s ‘transient’ slot directly.
   1673 
   1674  -- Function: transient--do-stay
   1675      Call the command without exporting variables and stay transient.
   1676 
   1677 Pre-commands for Suffixes
   1678 -------------------------
   1679 
   1680 By default, invoking a suffix causes the transient to be exited.
   1681 
   1682    The behavior for an individual suffix command can be changed by
   1683 setting its ‘transient’ slot to a boolean (which is highly recommended),
   1684 or to one of the following pre-commands.
   1685 
   1686  -- Function: transient--do-exit
   1687      Call the command after exporting variables and exit the transient.
   1688 
   1689  -- Function: transient--do-return
   1690      Call the command after exporting variables and return to the parent
   1691      prefix.  If there is no parent prefix, then call
   1692      ‘transient--do-exit’.
   1693 
   1694  -- Function: transient--do-call
   1695      Call the command after exporting variables and stay transient.
   1696 
   1697    The following pre-commands are only suitable for sub-prefixes.  It is
   1698 not necessary to explicitly use these predicates because the correct
   1699 predicate is automatically picked based on the value of the ‘transient’
   1700 slot for the sub-prefix itself.
   1701 
   1702  -- Function: transient--do-recurse
   1703      Call the transient prefix command, preparing for return to active
   1704      transient.
   1705 
   1706      Whether we actually return to the parent transient is ultimately
   1707      under the control of each invoked suffix.  The difference between
   1708      this pre-command and ‘transient--do-stack’ is that it changes the
   1709      value of the ‘transient-suffix’ slot to ‘t’.
   1710 
   1711      If there is no parent transient, then only call this command and
   1712      skip the second step.
   1713 
   1714  -- Function: transient--do-stack
   1715      Call the transient prefix command, stacking the active transient.
   1716      Push the active transient to the transient stack.
   1717 
   1718      Unless ‘transient--do-recurse’ is explicitly used, this pre-command
   1719      is automatically used for suffixes that are prefixes themselves,
   1720      i.e., for sub-prefixes.
   1721 
   1722  -- Function: transient--do-replace
   1723      Call the transient prefix command, replacing the active transient.
   1724      Do not push the active transient to the transient stack.
   1725 
   1726      Unless ‘transient--do-recurse’ is explicitly used, this pre-command
   1727      is automatically used for suffixes that are prefixes themselves,
   1728      i.e., for sub-prefixes.
   1729 
   1730  -- Function: transient--do-suspend
   1731      Suspend the active transient, saving the transient stack.
   1732 
   1733      This is used by the command ‘transient-suspend’ and optionally also
   1734      by “external events” such as ‘handle-switch-frame’.  Such bindings
   1735      should be added to ‘transient-predicate-map’.
   1736 
   1737 Pre-commands for Non-Suffixes
   1738 -----------------------------
   1739 
   1740 By default, non-suffixes (commands that are bound in other keymaps
   1741 beside the transient keymap) cannot be invoked.  Trying to invoke such a
   1742 command results in a warning and the transient stays active.
   1743 
   1744    If you want a different behavior, then set the ‘transient-non-suffix’
   1745 slot of the transient prefix command.  The value should be a boolean,
   1746 answering the question, "is it allowed to invoke non-suffix commands?, a
   1747 pre-command function, or a shorthand for such a function.
   1748 
   1749    If the value is ‘t’, then non-suffixes can be invoked, when it is
   1750 ‘nil’ (the default) then they cannot be invoked.
   1751 
   1752    The only other recommended value is ‘leave’.  If that is used, then
   1753 non-suffixes can be invoked, but if one is invoked, then that exits the
   1754 transient.
   1755 
   1756  -- Function: transient--do-warn
   1757      Call ‘transient-undefined’ and stay transient.
   1758 
   1759  -- Function: transient--do-stay
   1760      Call the command without exporting variables and stay transient.
   1761 
   1762  -- Function: transient--do-leave
   1763      Call the command without exporting variables and exit the
   1764      transient.
   1765 
   1766 Special Pre-Commands
   1767 --------------------
   1768 
   1769  -- Function: transient--do-quit-one
   1770      If active, quit help or edit mode, else exit the active transient.
   1771 
   1772      This is used when the user pressed ‘C-g’.
   1773 
   1774  -- Function: transient--do-quit-all
   1775      Exit all transients without saving the transient stack.
   1776 
   1777      This is used when the user pressed ‘C-q’.
   1778 
   1779  -- Function: transient--do-suspend
   1780      Suspend the active transient, saving the transient stack.
   1781 
   1782      This is used when the user pressed ‘C-z’.
   1783 
   1784 
   1785 File: transient.info,  Node: Classes and Methods,  Next: FAQ,  Prev: Defining New Commands,  Up: Top
   1786 
   1787 5 Classes and Methods
   1788 *********************
   1789 
   1790 Transient uses classes and generic functions to make it possible to
   1791 define new types of suffix and prefix commands, which are similar to
   1792 existing types, but behave differently in some respects.
   1793 
   1794    Every prefix, infix and suffix command is associated with an object,
   1795 which holds information, which controls certain aspects of its behavior.
   1796 This happens in two ways.
   1797 
   1798    • Associating a command with a certain class gives the command a
   1799      type.  This makes it possible to use generic functions to do
   1800      certain things that have to be done differently depending on what
   1801      type of command it acts on.
   1802 
   1803      That in turn makes it possible for third-parties to add new types
   1804      without having to convince the maintainer of Transient, that that
   1805      new type is important enough to justify adding a special case to a
   1806      dozen or so functions.
   1807 
   1808    • Associating a command with an object makes it possible to easily
   1809      store information that is specific to that particular command.
   1810 
   1811      Two commands may have the same type, but obviously their key
   1812      bindings and descriptions still have to be different, for example.
   1813 
   1814      The values of some slots are functions.  The ‘reader’ slot for
   1815      example holds a function that is used to read a new value for an
   1816      infix command.  The values of such slots are regular functions.
   1817 
   1818      Generic functions are used when a function should do something
   1819      different based on the type of the command, i.e., when all commands
   1820      of a certain type should behave the same way but different from the
   1821      behavior for other types.  Object slots that hold a regular
   1822      function as value are used when the task that they perform is
   1823      likely to differ even between different commands of the same type.
   1824 
   1825 * Menu:
   1826 
   1827 * Group Classes::
   1828 * Group Methods::
   1829 * Prefix Classes::
   1830 * Suffix Classes::
   1831 * Prefix Methods::
   1832 * Suffix Methods::
   1833 * Prefix Slots::
   1834 * Suffix Slots::
   1835 * Predicate Slots::
   1836 
   1837 
   1838 File: transient.info,  Node: Group Classes,  Next: Group Methods,  Up: Classes and Methods
   1839 
   1840 5.1 Group Classes
   1841 =================
   1842 
   1843 The type of a group can be specified using the ‘:class’ property at the
   1844 beginning of the class specification, e.g., ‘[:class transient-columns
   1845 ...]’ in a call to ‘transient-define-prefix’.
   1846 
   1847    • The abstract ‘transient-child’ class is the base class of both
   1848      ‘transient-group’ (and therefore all groups) as well as of
   1849      ‘transient-suffix’ (and therefore all suffix and infix commands).
   1850 
   1851      This class exists because the elements (or “children”) of certain
   1852      groups can be other groups instead of suffix and infix commands.
   1853 
   1854    • The abstract ‘transient-group’ class is the superclass of all other
   1855      group classes.
   1856 
   1857    • The ‘transient-column’ class is the simplest group.
   1858 
   1859      This is the default “flat” group.  If the class is not specified
   1860      explicitly and the first element is not a vector (i.e., not a
   1861      group), then this class is used.
   1862 
   1863      This class displays each element on a separate line.
   1864 
   1865    • The ‘transient-row’ class displays all elements on a single line.
   1866 
   1867    • The ‘transient-columns’ class displays commands organized in
   1868      columns.
   1869 
   1870      Direct elements have to be groups whose elements have to be
   1871      commands or strings.  Each subgroup represents a column.  This
   1872      class takes care of inserting the subgroups’ elements.
   1873 
   1874      This is the default “nested” group.  If the class is not specified
   1875      explicitly and the first element is a vector (i.e., a group), then
   1876      this class is used.
   1877 
   1878    • The ‘transient-subgroups’ class wraps other groups.
   1879 
   1880      Direct elements have to be groups whose elements have to be
   1881      commands or strings.  This group inserts an empty line between
   1882      subgroups.  The subgroups themselves are responsible for displaying
   1883      their elements.
   1884 
   1885 
   1886 File: transient.info,  Node: Group Methods,  Next: Prefix Classes,  Prev: Group Classes,  Up: Classes and Methods
   1887 
   1888 5.2 Group Methods
   1889 =================
   1890 
   1891  -- Function: transient-setup-children group children
   1892      This generic function can be used to setup the children or a group.
   1893 
   1894      The default implementation usually just returns the children
   1895      unchanged, but if the ‘setup-children’ slot of GROUP is non-‘nil’,
   1896      then it calls that function with CHILDREN as the only argument and
   1897      returns the value.
   1898 
   1899      The children are given as a (potentially empty) list consisting of
   1900      either group or suffix specifications.  These functions can make
   1901      arbitrary changes to the children including constructing new
   1902      children from scratch.
   1903 
   1904  -- Function: transient--insert-group group
   1905      This generic function formats the group and its elements and
   1906      inserts the result into the current buffer, which is a temporary
   1907      buffer.  The contents of that buffer are later inserted into the
   1908      popup buffer.
   1909 
   1910      Functions that are called by this function may need to operate in
   1911      the buffer from which the transient was called.  To do so they can
   1912      temporarily make the ‘transient--shadowed-buffer’ the current
   1913      buffer.
   1914 
   1915 
   1916 File: transient.info,  Node: Prefix Classes,  Next: Suffix Classes,  Prev: Group Methods,  Up: Classes and Methods
   1917 
   1918 5.3 Prefix Classes
   1919 ==================
   1920 
   1921 Transient itself provides a single class for prefix commands,
   1922 ‘transient-prefix’, but package authors may wish to define specialized
   1923 classes.  Doing so makes it possible to change the behavior of the set
   1924 of prefix commands that use that class, by implementing specialized
   1925 methods for certain generic functions (see *note Prefix Methods::).
   1926 
   1927    A transient prefix command’s object is stored in the
   1928 ‘transient--prefix’ property of the command symbol.  While a transient
   1929 is active, a clone of that object is stored in the variable
   1930 ‘transient--prefix’.  A clone is used because some changes that are made
   1931 to the active transient’s object should not affect later invocations.
   1932 
   1933 
   1934 File: transient.info,  Node: Suffix Classes,  Next: Prefix Methods,  Prev: Prefix Classes,  Up: Classes and Methods
   1935 
   1936 5.4 Suffix Classes
   1937 ==================
   1938 
   1939    • All suffix and infix classes derive from ‘transient-suffix’, which
   1940      in turn derives from ‘transient-child’, from which
   1941      ‘transient-group’ also derives (see *note Group Classes::).
   1942 
   1943    • All infix classes derive from the abstract ‘transient-infix’ class,
   1944      which in turn derives from the ‘transient-suffix’ class.
   1945 
   1946      Infixes are a special type of suffixes.  The primary difference is
   1947      that infixes always use the ‘transient--do-stay’ pre-command, while
   1948      non-infix suffixes use a variety of pre-commands (see *note
   1949      Transient State::).  Doing that is most easily achieved by using
   1950      this class, though theoretically it would be possible to define an
   1951      infix class that does not do so.  If you do that then you get to
   1952      implement many methods.
   1953 
   1954      Also, infixes and non-infix suffixes are usually defined using
   1955      different macros (see *note Defining Suffix and Infix Commands::).
   1956 
   1957    • Classes used for infix commands that represent arguments should be
   1958      derived from the abstract ‘transient-argument’ class.
   1959 
   1960    • The ‘transient-switch’ class (or a derived class) is used for infix
   1961      arguments that represent command-line switches (arguments that do
   1962      not take a value).
   1963 
   1964    • The ‘transient-option’ class (or a derived class) is used for infix
   1965      arguments that represent command-line options (arguments that do
   1966      take a value).
   1967 
   1968    • The ‘transient-switches’ class can be used for a set of mutually
   1969      exclusive command-line switches.
   1970 
   1971    • The ‘transient-files’ class can be used for a ‘--’ argument that
   1972      indicates that all remaining arguments are files.
   1973 
   1974    • Classes used for infix commands that represent variables should
   1975      derived from the abstract ‘transient-variable’ class.
   1976 
   1977    • The ‘transient-information’ and ‘transient-information*’ classes
   1978      are special in that suffixes that use these class are not
   1979      associated with a command and thus also not with any key binding.
   1980      Such suffixes are only used to display arbitrary information, and
   1981      that anywhere a suffix can appear.  Display-only suffix
   1982      specifications take these form:
   1983 
   1984           ([LEVEL] :info DESCRIPTION [KEYWORD VALUE]...)
   1985           ([LEVEL] :info* DESCRIPTION [KEYWORD VALUE]...)
   1986 
   1987      The ‘:info’ and ‘:info*’ keyword arguments replaces the
   1988      ‘:description’ keyword used for other suffix classes.  Other
   1989      keyword arguments that you might want to set, include ‘:face’,
   1990      predicate keywords (such as ‘:if’ and ‘:inapt-if’), and ‘:format’.
   1991      By default the value of ‘:format’ includes ‘%k’, which for this
   1992      class is replaced with the empty string or spaces, if keys are
   1993      being padded in the containing group.
   1994 
   1995      The only difference between these two classes is that ‘:info*’
   1996      aligns its description with the descriptions of suffix commands,
   1997      while for ‘:info’ the description bleeds into the area where
   1998      suffixes display their key bindings.
   1999 
   2000    • The ‘transient-lisp-variable’ class can be used to show and change
   2001      the value of lisp variables.  This class is not fully featured yet
   2002      and it is somewhat likely that future improvements won’t be fully
   2003      backward compatible.
   2004 
   2005    • The ‘transient-value-preset’ class is used to implement the command
   2006      ‘transient-preset’, which activates a value preset.
   2007 
   2008    Magit defines additional classes, which can serve as examples for the
   2009 fancy things you can do without modifying Transient.  Some of these
   2010 classes will likely get generalized and added to Transient.  For now
   2011 they are very much subject to change and not documented.
   2012 
   2013 
   2014 File: transient.info,  Node: Prefix Methods,  Next: Suffix Methods,  Prev: Suffix Classes,  Up: Classes and Methods
   2015 
   2016 5.5 Prefix Methods
   2017 ==================
   2018 
   2019 To get information about the methods implementing these generic
   2020 functions use ‘describe-function’.
   2021 
   2022  -- Function: transient-init-value obj
   2023      This generic function sets the initial value of the object OBJ.
   2024      Methods exist for both prefix and suffix objects.
   2025 
   2026      The default method for prefix objects sets the value of OBJ’s
   2027      ‘value’ slot to the set, saved or default value.  The value that is
   2028      set for the current session is preferred over the saved value,
   2029      which is preferred over the default value.
   2030 
   2031      The default value is determined using the generic function
   2032      ‘transient-default-value’.  If you need to change how the value for
   2033      a prefix class is determined, its usually sufficient to implement a
   2034      method for that function.
   2035 
   2036  -- Function: transient-default-value obj
   2037      This generic function returns the default value of the object OBJ.
   2038      Methods exist for both prefix and suffix objects.
   2039 
   2040      The default method for prefix objects returns the value of the
   2041      ‘default-value’ slot if that is bound and not a function.  If it is
   2042      a function, that is called to get the value.  If the slot is
   2043      unbound, ‘nil’ is returned.
   2044 
   2045  -- Function: transient-prefix-value obj
   2046      This generic function returns the value of the prefix object OBJ.
   2047      The respective generic function for infix and suffix objects is
   2048      named ‘transient-infix-value’.
   2049 
   2050  -- Function: transient-init-scope obj
   2051      This generic function sets the scope of the object OBJ.  Methods
   2052      exist for both prefix and suffix objects.
   2053 
   2054      This function is called for all prefix and suffix commands, but
   2055      unless a concrete method is implemented this falls through to the
   2056      default implementation, which is a noop.
   2057 
   2058    ‘transient-set-value’, ‘transient-save-value’,
   2059 ‘transient-reset-value’, ‘transient--history-key’,
   2060 ‘transient--history-push’ and ‘transient--history-init’ are other
   2061 generic functions dealing with the value of prefix objects.  See their
   2062 doc-strings for more information.
   2063 
   2064    ‘transient-show-help’ is another generic function implemented for
   2065 prefix commands.  The default method effectively describes the command
   2066 using ‘describe-function’.
   2067 
   2068 
   2069 File: transient.info,  Node: Suffix Methods,  Next: Prefix Slots,  Prev: Prefix Methods,  Up: Classes and Methods
   2070 
   2071 5.6 Suffix Methods
   2072 ==================
   2073 
   2074 To get information about the methods implementing these generic
   2075 functions use ‘describe-function’.
   2076 
   2077 * Menu:
   2078 
   2079 * Suffix Value Methods::
   2080 * Suffix Format Methods::
   2081 
   2082 
   2083 File: transient.info,  Node: Suffix Value Methods,  Next: Suffix Format Methods,  Up: Suffix Methods
   2084 
   2085 5.6.1 Suffix Value Methods
   2086 --------------------------
   2087 
   2088  -- Function: transient-init-value obj
   2089      This generic function sets the initial value of the object OBJ.
   2090 
   2091      This function is called for all suffix commands, but unless a
   2092      concrete method is implemented this falls through to the default
   2093      implementation, which is a noop.  In other words this usually only
   2094      does something for infix commands, but note that this is not
   2095      implemented for the abstract class ‘transient-infix’, so if your
   2096      class derives from that directly, then you must implement a method.
   2097 
   2098  -- Function: transient-infix-read obj
   2099      This generic function determines the new value of the infix object
   2100      OBJ.
   2101 
   2102      This function merely determines the value; ‘transient-infix-set’ is
   2103      used to actually store the new value in the object.
   2104 
   2105      For most infix classes this is done by reading a value from the
   2106      user using the reader specified by the ‘reader’ slot (using the
   2107      ‘transient-infix-value’ method described below).
   2108 
   2109      For some infix classes the value is changed without reading
   2110      anything in the minibuffer, i.e., the mere act of invoking the
   2111      infix command determines what the new value should be, based on the
   2112      previous value.
   2113 
   2114  -- Function: transient-prompt obj
   2115      This generic function returns the prompt to be used to read infix
   2116      object OBJ’s value.
   2117 
   2118  -- Function: transient-infix-set obj value
   2119      This generic function sets the value of infix object OBJ to VALUE.
   2120 
   2121  -- Function: transient-infix-value obj
   2122      This generic function returns the value of the suffix object OBJ.
   2123 
   2124      This function is called by ‘transient-args’ (which see), meaning
   2125      this function is how the value of a transient is determined so that
   2126      the invoked suffix command can use it.
   2127 
   2128      Currently most values are strings, but that is not set in stone.
   2129      ‘nil’ is not a value, it means “no value”.
   2130 
   2131      Usually only infixes have a value, but see the method for
   2132      ‘transient-suffix’.
   2133 
   2134  -- Function: transient-init-scope obj
   2135      This generic function sets the scope of the object OBJ.  Methods
   2136      exist for both prefix and suffix objects.
   2137 
   2138      The scope is actually a property of the transient prefix, not of
   2139      individual suffixes.  However it is possible to invoke a suffix
   2140      command directly instead of from a transient.  In that case, if the
   2141      suffix expects a scope, then it has to determine that itself and
   2142      store it in its ‘scope’ slot.
   2143 
   2144      This function is called for all prefix and suffix commands, but
   2145      unless a concrete method is implemented, this falls through to the
   2146      default implementation, which is a noop.
   2147 
   2148 
   2149 File: transient.info,  Node: Suffix Format Methods,  Prev: Suffix Value Methods,  Up: Suffix Methods
   2150 
   2151 5.6.2 Suffix Format Methods
   2152 ---------------------------
   2153 
   2154  -- Function: transient-format obj
   2155      This generic function formats and returns OBJ for display.
   2156 
   2157      When this function is called, then the current buffer is some
   2158      temporary buffer.  If you need the buffer from which the prefix
   2159      command was invoked to be current, then do so by temporarily making
   2160      ‘transient--source-buffer’ current.
   2161 
   2162  -- Function: transient-format-key obj
   2163      This generic function formats OBJ’s ‘key’ for display and returns
   2164      the result.
   2165 
   2166  -- Function: transient-format-description obj
   2167      This generic function formats OBJ’s ‘description’ for display and
   2168      returns the result.
   2169 
   2170  -- Function: transient-format-value obj
   2171      This generic function formats OBJ’s value for display and returns
   2172      the result.
   2173 
   2174  -- Function: transient-show-help obj
   2175      Show help for the prefix, infix or suffix command represented by
   2176      OBJ.
   2177 
   2178      Regardless of OBJ’s type, if its ‘show-help’ slot is non-‘nil’,
   2179      that must be a function, which takes OBJ is its only argument.  It
   2180      must prepare, display and return a buffer, and select the window
   2181      used to display it.  The ‘transient-show-help-window’ macro is
   2182      intended for use in such functions.
   2183 
   2184      For prefixes, show the info manual, if that is specified using the
   2185      ‘info-manual’ slot.  Otherwise, show the manpage if that is
   2186      specified using the ‘man-page’ slot.  Otherwise, show the command’s
   2187      documentation string.
   2188 
   2189      For suffixes, show the command’s documentation string.
   2190 
   2191      For infixes, show the manpage if that is specified.  Otherwise show
   2192      the command’s documentation string.
   2193 
   2194  -- Macro: transient-with-help-window &rest body
   2195      Evaluate BODY, send output to ‘*Help*’ buffer, and display it in a
   2196      window.  Select the help window, and make the help buffer current
   2197      and return it.
   2198 
   2199  -- Function: transient-show-summary obj &optional return
   2200      This generic function shows or, if optional RETURN is non-‘nil’,
   2201      returns a brief summary about the command at point or hovered with
   2202      the mouse.
   2203 
   2204      This function is called when the mouse is moved over a command and
   2205      (if the value of ‘transient-enable-popup-navigation’ is ‘verbose’)
   2206      when the user navigates to a command using the keyboard.
   2207 
   2208      If OBJ’s ‘summary’ slot is a string, that is used.  If ‘summary’ is
   2209      a function, that is called with OBJ as the only argument and the
   2210      returned string is used.  If ‘summary’ is or returns something
   2211      other than a string or ‘nil’, no summary is shown.  If ‘summary’ is
   2212      or returns ‘nil’, the first line of the documentation string is
   2213      used, if any.
   2214 
   2215      If RETURN is non-‘nil’, this function returns the summary instead
   2216      of showing it.  This is used when a tooltip is needed.
   2217 
   2218 
   2219 File: transient.info,  Node: Prefix Slots,  Next: Suffix Slots,  Prev: Suffix Methods,  Up: Classes and Methods
   2220 
   2221 5.7 Prefix Slots
   2222 ================
   2223 
   2224 Value and Scope
   2225 ---------------
   2226 
   2227    • ‘default-value’ The default value of the prefix.  Use the keyword
   2228      argument ‘:value’ (sic) to set this slot in the definition of a
   2229      prefix.
   2230 
   2231    • ‘init-value’ A function that is responsible for setting the
   2232      object’s value.  If bound, then this is called with the object as
   2233      the only argument.  Usually this is not bound, in which case the
   2234      object’s primary ‘transient-init-value’ method is called instead.
   2235 
   2236    • ‘history-key’ If multiple prefix commands should share a single
   2237      value, then this slot has to be set to the same value for all of
   2238      them.  You probably don’t want that.
   2239 
   2240    • ‘incompatible’ A list of lists.  Each sub-list specifies a set of
   2241      mutually exclusive arguments.  Enabling one of these arguments
   2242      causes the others to be disabled.  An argument may appear in
   2243      multiple sub-lists.  Arguments must me given in the same form as
   2244      used in the ‘argument’ or ‘argument-format’ slot of the respective
   2245      suffix objects, usually something like ‘--switch’ or ‘--option=%s’.
   2246      For options and ‘transient-switches’ suffixes it is also possible
   2247      to match against a specific value, as returned by
   2248      ‘transient-infix-value’, for example, ‘--option=one’.
   2249 
   2250    • ‘scope’ For some transients it might be necessary to have a sort of
   2251      secondary value, called a “scope”.  See ‘transient-define-prefix’.
   2252 
   2253 Behavior
   2254 --------
   2255 
   2256    • ‘transient-suffix’, ‘transient-non-suffix’ and
   2257      ‘transient-switch-frame’ play a part when determining whether the
   2258      currently active transient prefix command remains active/transient
   2259      when a suffix or arbitrary non-suffix command is invoked.  See
   2260      *note Transient State::.
   2261 
   2262    • ‘refresh-suffixes’ Normally suffix objects and keymaps are only
   2263      setup once, when the prefix is invoked.  Setting this to ‘t’,
   2264      causes them to be recreated after every command.  This is useful
   2265      when using ‘:if...’ predicates, and those need to be rerun for some
   2266      reason.  Doing this is somewhat costly, and there is a risk of
   2267      losing state, so this is disabled by default and still considered
   2268      experimental.
   2269 
   2270    • ‘environment’ A function used to establish an environment while
   2271      initializing, refreshing or redisplaying a transient prefix menu.
   2272      This is useful to establish a cache, in case multiple suffixes
   2273      require the same expensive work.  The provided function is called
   2274      with at least one argument, the function for which it establishes
   2275      the environment.  It must ‘funcall’ that function with no
   2276      arguments.  During initialization the second argument is the prefix
   2277      object being initialized.  This slot is still experimental.
   2278 
   2279 Appearance
   2280 ----------
   2281 
   2282    • ‘display-action’ determines how this prefix is displayed,
   2283      overriding ‘transient-display-buffer-action’.  It should have the
   2284      same type.
   2285 
   2286    • ‘mode-line-format’ is this prefix’s mode line format, overriding
   2287      ‘transient-mode-line-format’.  It should have the same type.
   2288 
   2289    • ‘column-width’ is only respected inside ‘transient-columns’ groups
   2290      and allows aligning columns across separate instances of that.
   2291 
   2292    • ‘variable-pitch’ controls whether alignment is done pixel-wise to
   2293      account for use of variable-pitch characters, which is useful,
   2294      e.g., when using emoji.
   2295 
   2296 Documentation
   2297 -------------
   2298 
   2299    • ‘show-help’, ‘man-page’ or ‘info-manual’ can be used to specify the
   2300      documentation for the prefix and its suffixes.  The command
   2301      ‘transient-help’ uses the function ‘transient-show-help’ (which
   2302      see) to lookup and use these values.
   2303 
   2304    • ‘suffix-description’ can be used to specify a function which
   2305      provides fallback descriptions for suffixes that lack a
   2306      description.  This is intended to be temporarily used when
   2307      implementing of a new prefix command, at which time
   2308      ‘transient-command-summary-or-name’ is a useful value.
   2309 
   2310 Internal
   2311 --------
   2312 
   2313 These slots are mostly intended for internal use.  They should not be
   2314 set in calls to ‘transient-define-prefix’.
   2315 
   2316    • ‘prototype’ When a transient prefix command is invoked, then a
   2317      clone of that object is stored in the global variable
   2318      ‘transient--prefix’ and the prototype is stored in the clone’s
   2319      ‘prototype’ slot.
   2320 
   2321    • ‘command’ The command, a symbol.  Each transient prefix command
   2322      consists of a command, which is stored in a symbol’s function slot
   2323      and an object, which is stored in the ‘transient--prefix’ property
   2324      of the same symbol.
   2325 
   2326    • ‘level’ The level of the prefix commands.  The suffix commands
   2327      whose layer is equal or lower are displayed.  See *note Enabling
   2328      and Disabling Suffixes::.
   2329 
   2330    • ‘value’ The likely outdated value of the prefix.  Instead of
   2331      accessing this slot directly you should use the function
   2332      ‘transient-get-value’, which is guaranteed to return the up-to-date
   2333      value.
   2334 
   2335    • ‘history’ and ‘history-pos’ are used to keep track of historic
   2336      values.  Unless you implement your own ‘transient-infix-read’
   2337      method you should not have to deal with these slots.
   2338 
   2339    • ‘unwind-suffix’ is used internally to ensure transient state is
   2340      properly exited, even in case of an error.
   2341 
   2342 
   2343 File: transient.info,  Node: Suffix Slots,  Next: Predicate Slots,  Prev: Prefix Slots,  Up: Classes and Methods
   2344 
   2345 5.8 Suffix Slots
   2346 ================
   2347 
   2348 Here we document most of the slots that are only available for suffix
   2349 objects.  Some slots are shared by suffix and group objects, they are
   2350 documented in *note Predicate Slots::.
   2351 
   2352    Also see *note Suffix Classes::.
   2353 
   2354 Slots of ‘transient-child’
   2355 --------------------------
   2356 
   2357 This is the abstract superclass of ‘transient-suffix’ and
   2358 ‘transient-group’.  This is where the shared ‘if*’ and ‘inapt-if*’ slots
   2359 (see *note Predicate Slots::) and the ‘level’ slot (see *note Enabling
   2360 and Disabling Suffixes::) are defined.
   2361 
   2362 Slots of ‘transient-suffix’
   2363 ---------------------------
   2364 
   2365    • ‘key’ The key, a key vector or a key description string.
   2366 
   2367    • ‘command’ The command, a symbol.
   2368 
   2369    • ‘transient’ Whether to stay transient.  See *note Transient
   2370      State::.
   2371 
   2372    • ‘format’ The format used to display the suffix in the popup buffer.
   2373      It must contain the following %-placeholders:
   2374 
   2375         • ‘%k’ For the key.
   2376         • ‘%d’ For the description.
   2377         • ‘%v’ For the infix value.  Non-infix suffixes don’t have a
   2378           value.
   2379 
   2380    • ‘description’ The description, either a string or a function, which
   2381      is called with zero or one argument (the suffix object), and
   2382      returns a string.
   2383 
   2384    • ‘face’ Face used for the description.  In simple cases it is easier
   2385      to use this instead of using a function as ‘description’ and adding
   2386      the styling there.  ‘face’ is appended using
   2387      ‘add-face-text-property’.
   2388 
   2389    • ‘show-help’ A function used to display help for the suffix.  If
   2390      unspecified, the prefix controls how help is displayed for its
   2391      suffixes.  See also function ‘transient-show-help’.
   2392 
   2393    • ‘summary’ The summary displayed in the echo area, or as a tooltip.
   2394      If this is ‘nil’, which it usually should be, the first line of the
   2395      documentation string is used instead.  See ‘transient-show-summary’
   2396      for details.
   2397 
   2398    • ‘definition’ A command, which is used if the body is omitted when
   2399      defining a command using ‘transient-define-suffix’.
   2400 
   2401 Slots of ‘transient-infix’
   2402 --------------------------
   2403 
   2404 Some of these slots are only meaningful for some of the subclasses.
   2405 They are defined here anyway to allow sharing certain methods.
   2406 
   2407    • ‘argument’ The long argument, e.g., ‘--verbose’.
   2408 
   2409    • ‘shortarg’ The short argument, e.g., ‘-v’.
   2410 
   2411    • ‘value’ The value.  Should not be accessed directly.
   2412 
   2413    • ‘init-value’ Function that is responsible for setting the object’s
   2414      value.  If bound, then this is called with the object as the only
   2415      argument.  Usually this is not bound, in which case the object’s
   2416      primary ‘transient-init-value’ method is called instead.
   2417 
   2418    • ‘unsavable’ Whether the value of the suffix is not saved as part of
   2419      the prefixes.
   2420 
   2421    • ‘multi-value’ For options, whether the option can have multiple
   2422      values.  If this is non-‘nil’, then the values are read using
   2423      ‘completing-read-multiple’ by default and if you specify your own
   2424      reader, then it should read the values using that function or
   2425      similar.
   2426 
   2427      Supported non-‘nil’ values are:
   2428 
   2429         • Use ‘rest’ for an option that can have multiple values.  This
   2430           is useful e.g., for an ‘--’ argument that indicates that all
   2431           remaining arguments are files (such as ‘git log -- file1
   2432           file2’).
   2433 
   2434           In the list returned by ‘transient-args’ such an option and
   2435           its values are represented by a single list of the form
   2436           ‘(ARGUMENT . VALUES)’.
   2437 
   2438         • Use ‘repeat’ for an option that can be specified multiple
   2439           times.
   2440 
   2441           In the list returned by ‘transient-args’ each instance of the
   2442           option and its value appears separately in the usual from, for
   2443           example: ‘("--another-argument" "--option=first"
   2444           "--option=second")’.
   2445 
   2446      In both cases the option’s values have to be specified in the
   2447      default value of a prefix using the same format as returned by
   2448      ‘transient-args’, e.g., ‘("--other" "--o=1" "--o=2" ("--" "f1"
   2449      "f2"))’.
   2450 
   2451    • ‘always-read’ For options, whether to read a value on every
   2452      invocation.  If this is ‘nil’, then options that have a value are
   2453      simply unset and have to be invoked a second time to set a new
   2454      value.
   2455 
   2456    • ‘allow-empty’ For options, whether the empty string is a valid
   2457      value.
   2458 
   2459    • ‘history-key’ The key used to store the history.  This defaults to
   2460      the command name.  This is useful when multiple infixes should
   2461      share the same history because their values are of the same kind.
   2462 
   2463    • ‘reader’ The function used to read the value of an infix.  Not used
   2464      for switches.  The function takes three arguments, PROMPT,
   2465      INITIAL-INPUT and HISTORY, and must return a string.
   2466 
   2467    • ‘prompt’ The prompt used when reading the value, either a string or
   2468      a function that takes the object as the only argument and which
   2469      returns a prompt string.
   2470 
   2471    • ‘choices’ A list of valid values, or a function that returns such a
   2472      list.  The latter is not implemented for ‘transient-switches’,
   2473      because I couldn’t think of a use-case.  How exactly the choices
   2474      are used varies depending on the class of the suffix.
   2475 
   2476 Slots of ‘transient-variable’
   2477 -----------------------------
   2478 
   2479    • ‘variable’ The variable.
   2480 
   2481 Slots of ‘transient-switches’
   2482 -----------------------------
   2483 
   2484    • ‘argument-format’ The display format.  Must contain ‘%s’, one of
   2485      the ‘choices’ is substituted for that.  E.g., ‘--%s-order’.
   2486 
   2487    • ‘argument-regexp’ The regexp used to match any one of the switches.
   2488      E.g., ‘\\(--\\(topo\\|author-date\\|date\\)-order\\)’.
   2489 
   2490 
   2491 File: transient.info,  Node: Predicate Slots,  Prev: Suffix Slots,  Up: Classes and Methods
   2492 
   2493 5.9 Predicate Slots
   2494 ===================
   2495 
   2496 Suffix and group objects share two sets of predicate slots that control
   2497 whether a group or suffix should be available depending on some state.
   2498 Only one slot from each set can be used at the same time.  It is
   2499 undefined which slot is honored if you use more than one.
   2500 
   2501    Predicates from the first group control whether the suffix is present
   2502 in the menu at all.
   2503 
   2504    • ‘if’ Enable if predicate returns non-‘nil’.
   2505    • ‘if-not’ Enable if predicate returns ‘nil’.
   2506    • ‘if-non-nil’ Enable if variable’s value is non-‘nil’.
   2507    • ‘if-nil’ Enable if variable’s value is ‘nil’.
   2508    • ‘if-mode’ Enable if major-mode matches value.
   2509    • ‘if-not-mode’ Enable if major-mode does not match value.
   2510    • ‘if-derived’ Enable if major-mode derives from value.
   2511    • ‘if-not-derived’ Enable if major-mode does not derive from value.
   2512 
   2513    Predicates from the second group control whether the suffix can be
   2514 invoked.  The suffix is shown in the menu regardless, but when it is
   2515 considered "inapt", then it is grayed out to indicated that it currently
   2516 cannot be invoked.
   2517 
   2518    • ‘inapt-if’ Inapt if predicate returns non-‘nil’.
   2519    • ‘inapt-if-not’ Inapt if predicate returns ‘nil’.
   2520    • ‘inapt-if-non-nil’ Inapt if variable’s value is non-‘nil’.
   2521    • ‘inapt-if-nil’ Inapt if variable’s value is ‘nil’.
   2522    • ‘inapt-if-mode’ Inapt if major-mode matches value.
   2523    • ‘inapt-if-not-mode’ Inapt if major-mode does not match value.
   2524    • ‘inapt-if-derived’ Inapt if major-mode derives from value.
   2525    • ‘inapt-if-not-derived’ Inapt if major-mode does not derive from
   2526      value.
   2527 
   2528    By default these predicates run when the prefix command is invoked,
   2529 but this can be changes, using the ‘refresh-suffixes’ prefix slot.  See
   2530 *note Prefix Slots::.
   2531 
   2532    One more slot is shared between group and suffix classes, ‘level’.
   2533 Like the slots documented above, it is a predicate, but it is used for a
   2534 different purpose.  The value has to be an integer between 1 and 7.
   2535 ‘level’ controls whether a suffix or a group should be available
   2536 depending on user preference.  See *note Enabling and Disabling
   2537 Suffixes::.
   2538 
   2539 
   2540 File: transient.info,  Node: FAQ,  Next: Keystroke Index,  Prev: Classes and Methods,  Up: Top
   2541 
   2542 Appendix A FAQ
   2543 **************
   2544 
   2545 A.1 Can I control how the popup buffer is displayed?
   2546 ====================================================
   2547 
   2548 Yes, see ‘transient-display-buffer-action’ in *note Configuration::.
   2549 You can also control how the popup buffer is displayed on a case-by-case
   2550 basis by passing ‘:display-action’ to ‘transient-define-prefix’.
   2551 
   2552 A.2 How can I copy text from the popup buffer?
   2553 ==============================================
   2554 
   2555 To be able to mark text in Transient’s popup buffer using the mouse, you
   2556 have to add the below binding.  Note that for technical reasons, the
   2557 region won’t be visualized, while doing so.  After you have quit the
   2558 transient popup, you will be able to yank it in another buffer.
   2559 
   2560      (keymap-set transient-predicate-map
   2561                  "<mouse-set-region>"
   2562                  #'transient--do-stay)
   2563 
   2564 A.3 How can I autoload prefix and suffix commands?
   2565 ==================================================
   2566 
   2567 If your package only supports Emacs 30, just prefix the definition with
   2568 ‘;;;###autoload’.  If your package supports released versions of Emacs,
   2569 you unfortunately have to use a long form autoload comment as described
   2570 in *note (elisp)Autoload::.
   2571 
   2572      ;;;###autoload (autoload 'magit-dispatch "magit" nil t)
   2573      (transient-define-prefix magit-dispatch ()
   2574        ...)
   2575 
   2576 A.4 How does Transient compare to prefix keys and universal arguments?
   2577 ======================================================================
   2578 
   2579 See
   2580 <https://github.com/magit/transient/wiki/Comparison-with-prefix-keys-and-universal-arguments>.
   2581 
   2582 A.5 How does Transient compare to Magit-Popup and Hydra?
   2583 ========================================================
   2584 
   2585 See
   2586 <https://github.com/magit/transient/wiki/Comparison-with-other-packages>.
   2587 
   2588 A.6 Why did some of the key bindings change?
   2589 ============================================
   2590 
   2591 You may have noticed that the bindings for some of the common commands
   2592 do *not* have the prefix ‘C-x’ and that furthermore some of these
   2593 commands are grayed out while others are not.  That unfortunately is a
   2594 bit confusing if the section of common commands is not shown
   2595 permanently, making the following explanation necessary.
   2596 
   2597    The purpose of usually hiding that section but showing it after the
   2598 user pressed the respective prefix key is to conserve space and not
   2599 overwhelm users with too much noise, while allowing the user to quickly
   2600 list common bindings on demand.
   2601 
   2602    That however should not keep us from using the best possible key
   2603 bindings.  The bindings that do use a prefix do so to avoid wasting too
   2604 many non-prefix bindings, keeping them available for use in individual
   2605 transients.  The bindings that do not use a prefix and that are *not*
   2606 grayed out are very important bindings that are *always* available, even
   2607 when invoking the “common command key prefix” or *any other*
   2608 transient-specific prefix.  The non-prefix keys that *are* grayed out
   2609 however, are not available when any incomplete prefix key sequence is
   2610 active.  They do not use the “common command key prefix” because it is
   2611 likely that users want to invoke them several times in a row and e.g.,
   2612 ‘M-p M-p M-p’ is much more convenient than ‘C-x M-p C-x M-p C-x M-p’.
   2613 
   2614    You may also have noticed that the “Set” command is bound to ‘C-x s’,
   2615 while Magit-Popup used to bind ‘C-c C-c’ instead.  I have seen several
   2616 users praise the latter binding (sic), so I did not change it
   2617 willy-nilly.  The reason that I changed it is that using different
   2618 prefix keys for different common commands, would have made the temporary
   2619 display of the common commands even more confusing, i.e., after pressing
   2620 ‘C-c’ all the bindings that begin with the ‘C-x’ prefix would be grayed
   2621 out.
   2622 
   2623    Using a single prefix for common commands key means that all other
   2624 potential prefix keys can be used for transient-specific commands
   2625 *without* the section of common commands also popping up.  ‘C-c’ in
   2626 particular is a prefix that I want to (and already do) use for Magit,
   2627 and also using that for a common command would prevent me from doing so.
   2628 
   2629    (See also the next question.)
   2630 
   2631 A.7 Why does ‘q’ not quit popups anymore?
   2632 =========================================
   2633 
   2634 I agree that ‘q’ is a good binding for commands that quit something.
   2635 This includes quitting whatever transient is currently active, but it
   2636 also includes quitting whatever it is that some specific transient is
   2637 controlling.  The transient ‘magit-blame’ for example binds ‘q’ to the
   2638 command that turns ‘magit-blame-mode’ off.
   2639 
   2640    So I had to decide if ‘q’ should quit the active transient (like
   2641 Magit-Popup used to) or whether ‘C-g’ should do that instead, so that
   2642 ‘q’ could be bound in individual transient to whatever commands make
   2643 sense for them.  Because all other letters are already reserved for use
   2644 by individual transients, I have decided to no longer make an exception
   2645 for ‘q’.
   2646 
   2647    If you want to get ‘q’’s old binding back then you can do so.  Doing
   2648 that is a bit more complicated than changing a single key binding, so I
   2649 have implemented a function, ‘transient-bind-q-to-quit’ that makes the
   2650 necessary changes.  See its documentation string for more information.
   2651 
   2652 
   2653 File: transient.info,  Node: Keystroke Index,  Next: Command and Function Index,  Prev: FAQ,  Up: Top
   2654 
   2655 Appendix B Keystroke Index
   2656 **************************
   2657 
   2658 
   2659 * Menu:
   2660 
   2661 * C-g:                                   Aborting and Resuming Transients.
   2662                                                                (line 27)
   2663 * C-g <1>:                               Aborting and Resuming Transients.
   2664                                                                (line 27)
   2665 * C-h:                                   Getting Help for Suffix Commands.
   2666                                                                (line 11)
   2667 * C-M-n:                                 Using History.        (line 18)
   2668 * C-M-p:                                 Using History.        (line 13)
   2669 * C-q:                                   Aborting and Resuming Transients.
   2670                                                                (line 36)
   2671 * C-x a:                                 Enabling and Disabling Suffixes.
   2672                                                                (line 68)
   2673 * C-x C-k:                               Saving Values.        (line 29)
   2674 * C-x C-s:                               Saving Values.        (line 25)
   2675 * C-x l:                                 Enabling and Disabling Suffixes.
   2676                                                                (line 43)
   2677 * C-x n:                                 Using History.        (line 18)
   2678 * C-x p:                                 Using History.        (line 13)
   2679 * C-x s:                                 Saving Values.        (line 21)
   2680 * C-x t:                                 Common Suffix Commands.
   2681                                                                (line 18)
   2682 * C-z:                                   Aborting and Resuming Transients.
   2683                                                                (line 41)
   2684 
   2685 
   2686 File: transient.info,  Node: Command and Function Index,  Next: Variable Index,  Prev: Keystroke Index,  Up: Top
   2687 
   2688 Appendix C Command and Function Index
   2689 *************************************
   2690 
   2691 
   2692 * Menu:
   2693 
   2694 * transient--do-call:                    Transient State.     (line 125)
   2695 * transient--do-exit:                    Transient State.     (line 117)
   2696 * transient--do-leave:                   Transient State.     (line 193)
   2697 * transient--do-quit-all:                Transient State.     (line 205)
   2698 * transient--do-quit-one:                Transient State.     (line 200)
   2699 * transient--do-recurse:                 Transient State.     (line 133)
   2700 * transient--do-replace:                 Transient State.     (line 153)
   2701 * transient--do-return:                  Transient State.     (line 120)
   2702 * transient--do-stack:                   Transient State.     (line 145)
   2703 * transient--do-stay:                    Transient State.     (line 105)
   2704 * transient--do-stay <1>:                Transient State.     (line 190)
   2705 * transient--do-suspend:                 Transient State.     (line 161)
   2706 * transient--do-suspend <1>:             Transient State.     (line 210)
   2707 * transient--do-warn:                    Transient State.     (line 187)
   2708 * transient--insert-group:               Group Methods.       (line  19)
   2709 * transient-active-prefix:               Current Prefix Command.
   2710                                                               (line  39)
   2711 * transient-append-suffix:               Modifying Existing Transients.
   2712                                                               (line  51)
   2713 * transient-arg-value:                   Using Infix Arguments.
   2714                                                               (line  39)
   2715 * transient-args:                        Using Infix Arguments.
   2716                                                               (line  22)
   2717 * transient-default-value:               Prefix Methods.      (line  23)
   2718 * transient-define-argument:             Defining Suffix and Infix Commands.
   2719                                                               (line  57)
   2720 * transient-define-infix:                Defining Suffix and Infix Commands.
   2721                                                               (line  26)
   2722 * transient-define-prefix:               Defining Transients. (line  13)
   2723 * transient-define-suffix:               Defining Suffix and Infix Commands.
   2724                                                               (line   9)
   2725 * transient-format:                      Suffix Format Methods.
   2726                                                               (line   6)
   2727 * transient-format-description:          Suffix Format Methods.
   2728                                                               (line  18)
   2729 * transient-format-key:                  Suffix Format Methods.
   2730                                                               (line  14)
   2731 * transient-format-value:                Suffix Format Methods.
   2732                                                               (line  22)
   2733 * transient-get-suffix:                  Modifying Existing Transients.
   2734                                                               (line  73)
   2735 * transient-get-value:                   Using Infix Arguments.
   2736                                                               (line  31)
   2737 * transient-help:                        Getting Help for Suffix Commands.
   2738                                                               (line  11)
   2739 * transient-history-next:                Using History.       (line  18)
   2740 * transient-history-prev:                Using History.       (line  13)
   2741 * transient-infix-read:                  Suffix Value Methods.
   2742                                                               (line  16)
   2743 * transient-infix-set:                   Suffix Value Methods.
   2744                                                               (line  36)
   2745 * transient-infix-value:                 Suffix Value Methods.
   2746                                                               (line  39)
   2747 * transient-init-scope:                  Prefix Methods.      (line  37)
   2748 * transient-init-scope <1>:              Suffix Value Methods.
   2749                                                               (line  52)
   2750 * transient-init-value:                  Prefix Methods.      (line   9)
   2751 * transient-init-value <1>:              Suffix Value Methods.
   2752                                                               (line   6)
   2753 * transient-insert-suffix:               Modifying Existing Transients.
   2754                                                               (line  49)
   2755 * transient-prefix-object:               Current Prefix Command.
   2756                                                               (line   6)
   2757 * transient-prefix-value:                Prefix Methods.      (line  32)
   2758 * transient-prompt:                      Suffix Value Methods.
   2759                                                               (line  32)
   2760 * transient-quit-all:                    Aborting and Resuming Transients.
   2761                                                               (line  36)
   2762 * transient-quit-one:                    Aborting and Resuming Transients.
   2763                                                               (line  27)
   2764 * transient-quit-seq:                    Aborting and Resuming Transients.
   2765                                                               (line  27)
   2766 * transient-remove-suffix:               Modifying Existing Transients.
   2767                                                               (line  70)
   2768 * transient-replace-suffix:              Modifying Existing Transients.
   2769                                                               (line  66)
   2770 * transient-reset:                       Saving Values.       (line  29)
   2771 * transient-resume:                      Aborting and Resuming Transients.
   2772                                                               (line  53)
   2773 * transient-save:                        Saving Values.       (line  25)
   2774 * transient-scroll-down:                 Other Commands.      (line  17)
   2775 * transient-scroll-up:                   Other Commands.      (line  12)
   2776 * transient-set:                         Saving Values.       (line  21)
   2777 * transient-set-level:                   Enabling and Disabling Suffixes.
   2778                                                               (line  43)
   2779 * transient-setup-children:              Group Methods.       (line   6)
   2780 * transient-show-help:                   Suffix Format Methods.
   2781                                                               (line  26)
   2782 * transient-show-summary:                Suffix Format Methods.
   2783                                                               (line  51)
   2784 * transient-suffix-object:               Current Suffix Command.
   2785                                                               (line   6)
   2786 * transient-suffix-put:                  Modifying Existing Transients.
   2787                                                               (line  77)
   2788 * transient-suffixes:                    Using Infix Arguments.
   2789                                                               (line  46)
   2790 * transient-suspend:                     Aborting and Resuming Transients.
   2791                                                               (line  41)
   2792 * transient-toggle-common:               Common Suffix Commands.
   2793                                                               (line  18)
   2794 * transient-toggle-level-limit:          Enabling and Disabling Suffixes.
   2795                                                               (line  68)
   2796 * transient-with-help-window:            Suffix Format Methods.
   2797                                                               (line  46)
   2798 
   2799 
   2800 File: transient.info,  Node: Variable Index,  Next: Concept Index,  Prev: Command and Function Index,  Up: Top
   2801 
   2802 Appendix D Variable Index
   2803 *************************
   2804 
   2805 
   2806 * Menu:
   2807 
   2808 * transient-align-variable-pitch:        Configuration.       (line 239)
   2809 * transient-current-command:             Current Prefix Command.
   2810                                                               (line  35)
   2811 * transient-current-prefix:              Current Prefix Command.
   2812                                                               (line  30)
   2813 * transient-current-suffixes:            Current Suffix Command.
   2814                                                               (line  45)
   2815 * transient-default-level:               Enabling and Disabling Suffixes.
   2816                                                               (line  33)
   2817 * transient-detect-key-conflicts:        Configuration.       (line 264)
   2818 * transient-display-buffer-action:       Configuration.       (line 112)
   2819 * transient-enable-popup-navigation:     Configuration.       (line  90)
   2820 * transient-exit-hook:                   Configuration.       (line 290)
   2821 * transient-force-fixed-pitch:           Configuration.       (line 252)
   2822 * transient-force-single-column:         Configuration.       (line 155)
   2823 * transient-highlight-higher-levels:     Configuration.       (line 277)
   2824 * transient-highlight-mismatched-keys:   Configuration.       (line 200)
   2825 * transient-history-file:                Using History.       (line  37)
   2826 * transient-history-limit:               Using History.       (line  41)
   2827 * transient-levels-file:                 Enabling and Disabling Suffixes.
   2828                                                               (line  38)
   2829 * transient-mode-line-format:            Configuration.       (line 164)
   2830 * transient-read-with-initial-input:     Configuration.       (line  83)
   2831 * transient-save-history:                Using History.       (line  33)
   2832 * transient-semantic-coloring:           Configuration.       (line 191)
   2833 * transient-setup-buffer-hook:           Configuration.       (line 293)
   2834 * transient-show-common-commands:        Common Suffix Commands.
   2835                                                               (line  23)
   2836 * transient-show-common-commands <1>:    Configuration.       (line  36)
   2837 * transient-show-during-minibuffer-read: Configuration.       (line  46)
   2838 * transient-show-popup:                  Configuration.       (line  15)
   2839 * transient-substitute-key-function:     Configuration.       (line 218)
   2840 * transient-values-file:                 Saving Values.       (line  32)
   2841 
   2842 
   2843 File: transient.info,  Node: Concept Index,  Next: GNU General Public License,  Prev: Variable Index,  Up: Top
   2844 
   2845 Appendix E Concept Index
   2846 ************************
   2847 
   2848 
   2849 * Menu:
   2850 
   2851 * aborting transients:                   Aborting and Resuming Transients.
   2852                                                                (line  6)
   2853 * classes and methods:                   Classes and Methods.  (line  6)
   2854 * command dispatchers:                   Technical Introduction.
   2855                                                                (line 39)
   2856 * common suffix commands:                Common Suffix Commands.
   2857                                                                (line  6)
   2858 * defining infix commands:               Defining Suffix and Infix Commands.
   2859                                                                (line  6)
   2860 * defining suffix commands:              Defining Suffix and Infix Commands.
   2861                                                                (line  6)
   2862 * disabling suffixes:                    Enabling and Disabling Suffixes.
   2863                                                                (line  6)
   2864 * enabling suffixes:                     Enabling and Disabling Suffixes.
   2865                                                                (line  6)
   2866 * getting help:                          Getting Help for Suffix Commands.
   2867                                                                (line  6)
   2868 * group specifications:                  Group Specifications. (line  6)
   2869 * invoking transients:                   Invoking Transients.  (line  6)
   2870 * levels:                                Enabling and Disabling Suffixes.
   2871                                                                (line 10)
   2872 * modifying existing transients:         Modifying Existing Transients.
   2873                                                                (line  6)
   2874 * quit transient:                        Aborting and Resuming Transients.
   2875                                                                (line  6)
   2876 * resuming transients:                   Aborting and Resuming Transients.
   2877                                                                (line  6)
   2878 * saving values of arguments:            Saving Values.        (line  6)
   2879 * scope of a transient:                  Defining Transients.  (line 43)
   2880 * suffix specifications:                 Suffix Specifications.
   2881                                                                (line  6)
   2882 * transient state:                       Transient State.      (line  6)
   2883 * transient-level:                       Enabling and Disabling Suffixes.
   2884                                                                (line 15)
   2885 * value history:                         Using History.        (line  6)
   2886 
   2887 
   2888 File: transient.info,  Node: GNU General Public License,  Prev: Concept Index,  Up: Top
   2889 
   2890 Appendix F GNU General Public License
   2891 *************************************
   2892 
   2893                         Version 3, 29 June 2007
   2894 
   2895      Copyright © 2007 Free Software Foundation, Inc. <https://fsf.org/>
   2896 
   2897      Everyone is permitted to copy and distribute verbatim copies of this
   2898      license document, but changing it is not allowed.
   2899 
   2900 Preamble
   2901 ========
   2902 
   2903 The GNU General Public License is a free, copyleft license for software
   2904 and other kinds of works.
   2905 
   2906    The licenses for most software and other practical works are designed
   2907 to take away your freedom to share and change the works.  By contrast,
   2908 the GNU General Public License is intended to guarantee your freedom to
   2909 share and change all versions of a program—to make sure it remains free
   2910 software for all its users.  We, the Free Software Foundation, use the
   2911 GNU General Public License for most of our software; it applies also to
   2912 any other work released this way by its authors.  You can apply it to
   2913 your programs, too.
   2914 
   2915    When we speak of free software, we are referring to freedom, not
   2916 price.  Our General Public Licenses are designed to make sure that you
   2917 have the freedom to distribute copies of free software (and charge for
   2918 them if you wish), that you receive source code or can get it if you
   2919 want it, that you can change the software or use pieces of it in new
   2920 free programs, and that you know you can do these things.
   2921 
   2922    To protect your rights, we need to prevent others from denying you
   2923 these rights or asking you to surrender the rights.  Therefore, you have
   2924 certain responsibilities if you distribute copies of the software, or if
   2925 you modify it: responsibilities to respect the freedom of others.
   2926 
   2927    For example, if you distribute copies of such a program, whether
   2928 gratis or for a fee, you must pass on to the recipients the same
   2929 freedoms that you received.  You must make sure that they, too, receive
   2930 or can get the source code.  And you must show them these terms so they
   2931 know their rights.
   2932 
   2933    Developers that use the GNU GPL protect your rights with two steps:
   2934 (1) assert copyright on the software, and (2) offer you this License
   2935 giving you legal permission to copy, distribute and/or modify it.
   2936 
   2937    For the developers’ and authors’ protection, the GPL clearly explains
   2938 that there is no warranty for this free software.  For both users’ and
   2939 authors’ sake, the GPL requires that modified versions be marked as
   2940 changed, so that their problems will not be attributed erroneously to
   2941 authors of previous versions.
   2942 
   2943    Some devices are designed to deny users access to install or run
   2944 modified versions of the software inside them, although the manufacturer
   2945 can do so.  This is fundamentally incompatible with the aim of
   2946 protecting users’ freedom to change the software.  The systematic
   2947 pattern of such abuse occurs in the area of products for individuals to
   2948 use, which is precisely where it is most unacceptable.  Therefore, we
   2949 have designed this version of the GPL to prohibit the practice for those
   2950 products.  If such problems arise substantially in other domains, we
   2951 stand ready to extend this provision to those domains in future versions
   2952 of the GPL, as needed to protect the freedom of users.
   2953 
   2954    Finally, every program is threatened constantly by software patents.
   2955 States should not allow patents to restrict development and use of
   2956 software on general-purpose computers, but in those that do, we wish to
   2957 avoid the special danger that patents applied to a free program could
   2958 make it effectively proprietary.  To prevent this, the GPL assures that
   2959 patents cannot be used to render the program non-free.
   2960 
   2961    The precise terms and conditions for copying, distribution and
   2962 modification follow.
   2963 
   2964 TERMS AND CONDITIONS
   2965 ====================
   2966 
   2967   0. Definitions.
   2968 
   2969      “This License” refers to version 3 of the GNU General Public
   2970      License.
   2971 
   2972      “Copyright” also means copyright-like laws that apply to other
   2973      kinds of works, such as semiconductor masks.
   2974 
   2975      “The Program” refers to any copyrightable work licensed under this
   2976      License.  Each licensee is addressed as “you”.  “Licensees” and
   2977      “recipients” may be individuals or organizations.
   2978 
   2979      To “modify” a work means to copy from or adapt all or part of the
   2980      work in a fashion requiring copyright permission, other than the
   2981      making of an exact copy.  The resulting work is called a “modified
   2982      version” of the earlier work or a work “based on” the earlier work.
   2983 
   2984      A “covered work” means either the unmodified Program or a work
   2985      based on the Program.
   2986 
   2987      To “propagate” a work means to do anything with it that, without
   2988      permission, would make you directly or secondarily liable for
   2989      infringement under applicable copyright law, except executing it on
   2990      a computer or modifying a private copy.  Propagation includes
   2991      copying, distribution (with or without modification), making
   2992      available to the public, and in some countries other activities as
   2993      well.
   2994 
   2995      To “convey” a work means any kind of propagation that enables other
   2996      parties to make or receive copies.  Mere interaction with a user
   2997      through a computer network, with no transfer of a copy, is not
   2998      conveying.
   2999 
   3000      An interactive user interface displays “Appropriate Legal Notices”
   3001      to the extent that it includes a convenient and prominently visible
   3002      feature that (1) displays an appropriate copyright notice, and (2)
   3003      tells the user that there is no warranty for the work (except to
   3004      the extent that warranties are provided), that licensees may convey
   3005      the work under this License, and how to view a copy of this
   3006      License.  If the interface presents a list of user commands or
   3007      options, such as a menu, a prominent item in the list meets this
   3008      criterion.
   3009 
   3010   1. Source Code.
   3011 
   3012      The “source code” for a work means the preferred form of the work
   3013      for making modifications to it.  “Object code” means any non-source
   3014      form of a work.
   3015 
   3016      A “Standard Interface” means an interface that either is an
   3017      official standard defined by a recognized standards body, or, in
   3018      the case of interfaces specified for a particular programming
   3019      language, one that is widely used among developers working in that
   3020      language.
   3021 
   3022      The “System Libraries” of an executable work include anything,
   3023      other than the work as a whole, that (a) is included in the normal
   3024      form of packaging a Major Component, but which is not part of that
   3025      Major Component, and (b) serves only to enable use of the work with
   3026      that Major Component, or to implement a Standard Interface for
   3027      which an implementation is available to the public in source code
   3028      form.  A “Major Component”, in this context, means a major
   3029      essential component (kernel, window system, and so on) of the
   3030      specific operating system (if any) on which the executable work
   3031      runs, or a compiler used to produce the work, or an object code
   3032      interpreter used to run it.
   3033 
   3034      The “Corresponding Source” for a work in object code form means all
   3035      the source code needed to generate, install, and (for an executable
   3036      work) run the object code and to modify the work, including scripts
   3037      to control those activities.  However, it does not include the
   3038      work’s System Libraries, or general-purpose tools or generally
   3039      available free programs which are used unmodified in performing
   3040      those activities but which are not part of the work.  For example,
   3041      Corresponding Source includes interface definition files associated
   3042      with source files for the work, and the source code for shared
   3043      libraries and dynamically linked subprograms that the work is
   3044      specifically designed to require, such as by intimate data
   3045      communication or control flow between those subprograms and other
   3046      parts of the work.
   3047 
   3048      The Corresponding Source need not include anything that users can
   3049      regenerate automatically from other parts of the Corresponding
   3050      Source.
   3051 
   3052      The Corresponding Source for a work in source code form is that
   3053      same work.
   3054 
   3055   2. Basic Permissions.
   3056 
   3057      All rights granted under this License are granted for the term of
   3058      copyright on the Program, and are irrevocable provided the stated
   3059      conditions are met.  This License explicitly affirms your unlimited
   3060      permission to run the unmodified Program.  The output from running
   3061      a covered work is covered by this License only if the output, given
   3062      its content, constitutes a covered work.  This License acknowledges
   3063      your rights of fair use or other equivalent, as provided by
   3064      copyright law.
   3065 
   3066      You may make, run and propagate covered works that you do not
   3067      convey, without conditions so long as your license otherwise
   3068      remains in force.  You may convey covered works to others for the
   3069      sole purpose of having them make modifications exclusively for you,
   3070      or provide you with facilities for running those works, provided
   3071      that you comply with the terms of this License in conveying all
   3072      material for which you do not control copyright.  Those thus making
   3073      or running the covered works for you must do so exclusively on your
   3074      behalf, under your direction and control, on terms that prohibit
   3075      them from making any copies of your copyrighted material outside
   3076      their relationship with you.
   3077 
   3078      Conveying under any other circumstances is permitted solely under
   3079      the conditions stated below.  Sublicensing is not allowed; section
   3080      10 makes it unnecessary.
   3081 
   3082   3. Protecting Users’ Legal Rights From Anti-Circumvention Law.
   3083 
   3084      No covered work shall be deemed part of an effective technological
   3085      measure under any applicable law fulfilling obligations under
   3086      article 11 of the WIPO copyright treaty adopted on 20 December
   3087      1996, or similar laws prohibiting or restricting circumvention of
   3088      such measures.
   3089 
   3090      When you convey a covered work, you waive any legal power to forbid
   3091      circumvention of technological measures to the extent such
   3092      circumvention is effected by exercising rights under this License
   3093      with respect to the covered work, and you disclaim any intention to
   3094      limit operation or modification of the work as a means of
   3095      enforcing, against the work’s users, your or third parties’ legal
   3096      rights to forbid circumvention of technological measures.
   3097 
   3098   4. Conveying Verbatim Copies.
   3099 
   3100      You may convey verbatim copies of the Program’s source code as you
   3101      receive it, in any medium, provided that you conspicuously and
   3102      appropriately publish on each copy an appropriate copyright notice;
   3103      keep intact all notices stating that this License and any
   3104      non-permissive terms added in accord with section 7 apply to the
   3105      code; keep intact all notices of the absence of any warranty; and
   3106      give all recipients a copy of this License along with the Program.
   3107 
   3108      You may charge any price or no price for each copy that you convey,
   3109      and you may offer support or warranty protection for a fee.
   3110 
   3111   5. Conveying Modified Source Versions.
   3112 
   3113      You may convey a work based on the Program, or the modifications to
   3114      produce it from the Program, in the form of source code under the
   3115      terms of section 4, provided that you also meet all of these
   3116      conditions:
   3117 
   3118        a. The work must carry prominent notices stating that you
   3119           modified it, and giving a relevant date.
   3120 
   3121        b. The work must carry prominent notices stating that it is
   3122           released under this License and any conditions added under
   3123           section 7.  This requirement modifies the requirement in
   3124           section 4 to “keep intact all notices”.
   3125 
   3126        c. You must license the entire work, as a whole, under this
   3127           License to anyone who comes into possession of a copy.  This
   3128           License will therefore apply, along with any applicable
   3129           section 7 additional terms, to the whole of the work, and all
   3130           its parts, regardless of how they are packaged.  This License
   3131           gives no permission to license the work in any other way, but
   3132           it does not invalidate such permission if you have separately
   3133           received it.
   3134 
   3135        d. If the work has interactive user interfaces, each must display
   3136           Appropriate Legal Notices; however, if the Program has
   3137           interactive interfaces that do not display Appropriate Legal
   3138           Notices, your work need not make them do so.
   3139 
   3140      A compilation of a covered work with other separate and independent
   3141      works, which are not by their nature extensions of the covered
   3142      work, and which are not combined with it such as to form a larger
   3143      program, in or on a volume of a storage or distribution medium, is
   3144      called an “aggregate” if the compilation and its resulting
   3145      copyright are not used to limit the access or legal rights of the
   3146      compilation’s users beyond what the individual works permit.
   3147      Inclusion of a covered work in an aggregate does not cause this
   3148      License to apply to the other parts of the aggregate.
   3149 
   3150   6. Conveying Non-Source Forms.
   3151 
   3152      You may convey a covered work in object code form under the terms
   3153      of sections 4 and 5, provided that you also convey the
   3154      machine-readable Corresponding Source under the terms of this
   3155      License, in one of these ways:
   3156 
   3157        a. Convey the object code in, or embodied in, a physical product
   3158           (including a physical distribution medium), accompanied by the
   3159           Corresponding Source fixed on a durable physical medium
   3160           customarily used for software interchange.
   3161 
   3162        b. Convey the object code in, or embodied in, a physical product
   3163           (including a physical distribution medium), accompanied by a
   3164           written offer, valid for at least three years and valid for as
   3165           long as you offer spare parts or customer support for that
   3166           product model, to give anyone who possesses the object code
   3167           either (1) a copy of the Corresponding Source for all the
   3168           software in the product that is covered by this License, on a
   3169           durable physical medium customarily used for software
   3170           interchange, for a price no more than your reasonable cost of
   3171           physically performing this conveying of source, or (2) access
   3172           to copy the Corresponding Source from a network server at no
   3173           charge.
   3174 
   3175        c. Convey individual copies of the object code with a copy of the
   3176           written offer to provide the Corresponding Source.  This
   3177           alternative is allowed only occasionally and noncommercially,
   3178           and only if you received the object code with such an offer,
   3179           in accord with subsection 6b.
   3180 
   3181        d. Convey the object code by offering access from a designated
   3182           place (gratis or for a charge), and offer equivalent access to
   3183           the Corresponding Source in the same way through the same
   3184           place at no further charge.  You need not require recipients
   3185           to copy the Corresponding Source along with the object code.
   3186           If the place to copy the object code is a network server, the
   3187           Corresponding Source may be on a different server (operated by
   3188           you or a third party) that supports equivalent copying
   3189           facilities, provided you maintain clear directions next to the
   3190           object code saying where to find the Corresponding Source.
   3191           Regardless of what server hosts the Corresponding Source, you
   3192           remain obligated to ensure that it is available for as long as
   3193           needed to satisfy these requirements.
   3194 
   3195        e. Convey the object code using peer-to-peer transmission,
   3196           provided you inform other peers where the object code and
   3197           Corresponding Source of the work are being offered to the
   3198           general public at no charge under subsection 6d.
   3199 
   3200      A separable portion of the object code, whose source code is
   3201      excluded from the Corresponding Source as a System Library, need
   3202      not be included in conveying the object code work.
   3203 
   3204      A “User Product” is either (1) a “consumer product”, which means
   3205      any tangible personal property which is normally used for personal,
   3206      family, or household purposes, or (2) anything designed or sold for
   3207      incorporation into a dwelling.  In determining whether a product is
   3208      a consumer product, doubtful cases shall be resolved in favor of
   3209      coverage.  For a particular product received by a particular user,
   3210      “normally used” refers to a typical or common use of that class of
   3211      product, regardless of the status of the particular user or of the
   3212      way in which the particular user actually uses, or expects or is
   3213      expected to use, the product.  A product is a consumer product
   3214      regardless of whether the product has substantial commercial,
   3215      industrial or non-consumer uses, unless such uses represent the
   3216      only significant mode of use of the product.
   3217 
   3218      “Installation Information” for a User Product means any methods,
   3219      procedures, authorization keys, or other information required to
   3220      install and execute modified versions of a covered work in that
   3221      User Product from a modified version of its Corresponding Source.
   3222      The information must suffice to ensure that the continued
   3223      functioning of the modified object code is in no case prevented or
   3224      interfered with solely because modification has been made.
   3225 
   3226      If you convey an object code work under this section in, or with,
   3227      or specifically for use in, a User Product, and the conveying
   3228      occurs as part of a transaction in which the right of possession
   3229      and use of the User Product is transferred to the recipient in
   3230      perpetuity or for a fixed term (regardless of how the transaction
   3231      is characterized), the Corresponding Source conveyed under this
   3232      section must be accompanied by the Installation Information.  But
   3233      this requirement does not apply if neither you nor any third party
   3234      retains the ability to install modified object code on the User
   3235      Product (for example, the work has been installed in ROM).
   3236 
   3237      The requirement to provide Installation Information does not
   3238      include a requirement to continue to provide support service,
   3239      warranty, or updates for a work that has been modified or installed
   3240      by the recipient, or for the User Product in which it has been
   3241      modified or installed.  Access to a network may be denied when the
   3242      modification itself materially and adversely affects the operation
   3243      of the network or violates the rules and protocols for
   3244      communication across the network.
   3245 
   3246      Corresponding Source conveyed, and Installation Information
   3247      provided, in accord with this section must be in a format that is
   3248      publicly documented (and with an implementation available to the
   3249      public in source code form), and must require no special password
   3250      or key for unpacking, reading or copying.
   3251 
   3252   7. Additional Terms.
   3253 
   3254      “Additional permissions” are terms that supplement the terms of
   3255      this License by making exceptions from one or more of its
   3256      conditions.  Additional permissions that are applicable to the
   3257      entire Program shall be treated as though they were included in
   3258      this License, to the extent that they are valid under applicable
   3259      law.  If additional permissions apply only to part of the Program,
   3260      that part may be used separately under those permissions, but the
   3261      entire Program remains governed by this License without regard to
   3262      the additional permissions.
   3263 
   3264      When you convey a copy of a covered work, you may at your option
   3265      remove any additional permissions from that copy, or from any part
   3266      of it.  (Additional permissions may be written to require their own
   3267      removal in certain cases when you modify the work.)  You may place
   3268      additional permissions on material, added by you to a covered work,
   3269      for which you have or can give appropriate copyright permission.
   3270 
   3271      Notwithstanding any other provision of this License, for material
   3272      you add to a covered work, you may (if authorized by the copyright
   3273      holders of that material) supplement the terms of this License with
   3274      terms:
   3275 
   3276        a. Disclaiming warranty or limiting liability differently from
   3277           the terms of sections 15 and 16 of this License; or
   3278 
   3279        b. Requiring preservation of specified reasonable legal notices
   3280           or author attributions in that material or in the Appropriate
   3281           Legal Notices displayed by works containing it; or
   3282 
   3283        c. Prohibiting misrepresentation of the origin of that material,
   3284           or requiring that modified versions of such material be marked
   3285           in reasonable ways as different from the original version; or
   3286 
   3287        d. Limiting the use for publicity purposes of names of licensors
   3288           or authors of the material; or
   3289 
   3290        e. Declining to grant rights under trademark law for use of some
   3291           trade names, trademarks, or service marks; or
   3292 
   3293        f. Requiring indemnification of licensors and authors of that
   3294           material by anyone who conveys the material (or modified
   3295           versions of it) with contractual assumptions of liability to
   3296           the recipient, for any liability that these contractual
   3297           assumptions directly impose on those licensors and authors.
   3298 
   3299      All other non-permissive additional terms are considered “further
   3300      restrictions” within the meaning of section 10.  If the Program as
   3301      you received it, or any part of it, contains a notice stating that
   3302      it is governed by this License along with a term that is a further
   3303      restriction, you may remove that term.  If a license document
   3304      contains a further restriction but permits relicensing or conveying
   3305      under this License, you may add to a covered work material governed
   3306      by the terms of that license document, provided that the further
   3307      restriction does not survive such relicensing or conveying.
   3308 
   3309      If you add terms to a covered work in accord with this section, you
   3310      must place, in the relevant source files, a statement of the
   3311      additional terms that apply to those files, or a notice indicating
   3312      where to find the applicable terms.
   3313 
   3314      Additional terms, permissive or non-permissive, may be stated in
   3315      the form of a separately written license, or stated as exceptions;
   3316      the above requirements apply either way.
   3317 
   3318   8. Termination.
   3319 
   3320      You may not propagate or modify a covered work except as expressly
   3321      provided under this License.  Any attempt otherwise to propagate or
   3322      modify it is void, and will automatically terminate your rights
   3323      under this License (including any patent licenses granted under the
   3324      third paragraph of section 11).
   3325 
   3326      However, if you cease all violation of this License, then your
   3327      license from a particular copyright holder is reinstated (a)
   3328      provisionally, unless and until the copyright holder explicitly and
   3329      finally terminates your license, and (b) permanently, if the
   3330      copyright holder fails to notify you of the violation by some
   3331      reasonable means prior to 60 days after the cessation.
   3332 
   3333      Moreover, your license from a particular copyright holder is
   3334      reinstated permanently if the copyright holder notifies you of the
   3335      violation by some reasonable means, this is the first time you have
   3336      received notice of violation of this License (for any work) from
   3337      that copyright holder, and you cure the violation prior to 30 days
   3338      after your receipt of the notice.
   3339 
   3340      Termination of your rights under this section does not terminate
   3341      the licenses of parties who have received copies or rights from you
   3342      under this License.  If your rights have been terminated and not
   3343      permanently reinstated, you do not qualify to receive new licenses
   3344      for the same material under section 10.
   3345 
   3346   9. Acceptance Not Required for Having Copies.
   3347 
   3348      You are not required to accept this License in order to receive or
   3349      run a copy of the Program.  Ancillary propagation of a covered work
   3350      occurring solely as a consequence of using peer-to-peer
   3351      transmission to receive a copy likewise does not require
   3352      acceptance.  However, nothing other than this License grants you
   3353      permission to propagate or modify any covered work.  These actions
   3354      infringe copyright if you do not accept this License.  Therefore,
   3355      by modifying or propagating a covered work, you indicate your
   3356      acceptance of this License to do so.
   3357 
   3358   10. Automatic Licensing of Downstream Recipients.
   3359 
   3360      Each time you convey a covered work, the recipient automatically
   3361      receives a license from the original licensors, to run, modify and
   3362      propagate that work, subject to this License.  You are not
   3363      responsible for enforcing compliance by third parties with this
   3364      License.
   3365 
   3366      An “entity transaction” is a transaction transferring control of an
   3367      organization, or substantially all assets of one, or subdividing an
   3368      organization, or merging organizations.  If propagation of a
   3369      covered work results from an entity transaction, each party to that
   3370      transaction who receives a copy of the work also receives whatever
   3371      licenses to the work the party’s predecessor in interest had or
   3372      could give under the previous paragraph, plus a right to possession
   3373      of the Corresponding Source of the work from the predecessor in
   3374      interest, if the predecessor has it or can get it with reasonable
   3375      efforts.
   3376 
   3377      You may not impose any further restrictions on the exercise of the
   3378      rights granted or affirmed under this License.  For example, you
   3379      may not impose a license fee, royalty, or other charge for exercise
   3380      of rights granted under this License, and you may not initiate
   3381      litigation (including a cross-claim or counterclaim in a lawsuit)
   3382      alleging that any patent claim is infringed by making, using,
   3383      selling, offering for sale, or importing the Program or any portion
   3384      of it.
   3385 
   3386   11. Patents.
   3387 
   3388      A “contributor” is a copyright holder who authorizes use under this
   3389      License of the Program or a work on which the Program is based.
   3390      The work thus licensed is called the contributor’s “contributor
   3391      version”.
   3392 
   3393      A contributor’s “essential patent claims” are all patent claims
   3394      owned or controlled by the contributor, whether already acquired or
   3395      hereafter acquired, that would be infringed by some manner,
   3396      permitted by this License, of making, using, or selling its
   3397      contributor version, but do not include claims that would be
   3398      infringed only as a consequence of further modification of the
   3399      contributor version.  For purposes of this definition, “control”
   3400      includes the right to grant patent sublicenses in a manner
   3401      consistent with the requirements of this License.
   3402 
   3403      Each contributor grants you a non-exclusive, worldwide,
   3404      royalty-free patent license under the contributor’s essential
   3405      patent claims, to make, use, sell, offer for sale, import and
   3406      otherwise run, modify and propagate the contents of its contributor
   3407      version.
   3408 
   3409      In the following three paragraphs, a “patent license” is any
   3410      express agreement or commitment, however denominated, not to
   3411      enforce a patent (such as an express permission to practice a
   3412      patent or covenant not to sue for patent infringement).  To “grant”
   3413      such a patent license to a party means to make such an agreement or
   3414      commitment not to enforce a patent against the party.
   3415 
   3416      If you convey a covered work, knowingly relying on a patent
   3417      license, and the Corresponding Source of the work is not available
   3418      for anyone to copy, free of charge and under the terms of this
   3419      License, through a publicly available network server or other
   3420      readily accessible means, then you must either (1) cause the
   3421      Corresponding Source to be so available, or (2) arrange to deprive
   3422      yourself of the benefit of the patent license for this particular
   3423      work, or (3) arrange, in a manner consistent with the requirements
   3424      of this License, to extend the patent license to downstream
   3425      recipients.  “Knowingly relying” means you have actual knowledge
   3426      that, but for the patent license, your conveying the covered work
   3427      in a country, or your recipient’s use of the covered work in a
   3428      country, would infringe one or more identifiable patents in that
   3429      country that you have reason to believe are valid.
   3430 
   3431      If, pursuant to or in connection with a single transaction or
   3432      arrangement, you convey, or propagate by procuring conveyance of, a
   3433      covered work, and grant a patent license to some of the parties
   3434      receiving the covered work authorizing them to use, propagate,
   3435      modify or convey a specific copy of the covered work, then the
   3436      patent license you grant is automatically extended to all
   3437      recipients of the covered work and works based on it.
   3438 
   3439      A patent license is “discriminatory” if it does not include within
   3440      the scope of its coverage, prohibits the exercise of, or is
   3441      conditioned on the non-exercise of one or more of the rights that
   3442      are specifically granted under this License.  You may not convey a
   3443      covered work if you are a party to an arrangement with a third
   3444      party that is in the business of distributing software, under which
   3445      you make payment to the third party based on the extent of your
   3446      activity of conveying the work, and under which the third party
   3447      grants, to any of the parties who would receive the covered work
   3448      from you, a discriminatory patent license (a) in connection with
   3449      copies of the covered work conveyed by you (or copies made from
   3450      those copies), or (b) primarily for and in connection with specific
   3451      products or compilations that contain the covered work, unless you
   3452      entered into that arrangement, or that patent license was granted,
   3453      prior to 28 March 2007.
   3454 
   3455      Nothing in this License shall be construed as excluding or limiting
   3456      any implied license or other defenses to infringement that may
   3457      otherwise be available to you under applicable patent law.
   3458 
   3459   12. No Surrender of Others’ Freedom.
   3460 
   3461      If conditions are imposed on you (whether by court order, agreement
   3462      or otherwise) that contradict the conditions of this License, they
   3463      do not excuse you from the conditions of this License.  If you
   3464      cannot convey a covered work so as to satisfy simultaneously your
   3465      obligations under this License and any other pertinent obligations,
   3466      then as a consequence you may not convey it at all.  For example,
   3467      if you agree to terms that obligate you to collect a royalty for
   3468      further conveying from those to whom you convey the Program, the
   3469      only way you could satisfy both those terms and this License would
   3470      be to refrain entirely from conveying the Program.
   3471 
   3472   13. Use with the GNU Affero General Public License.
   3473 
   3474      Notwithstanding any other provision of this License, you have
   3475      permission to link or combine any covered work with a work licensed
   3476      under version 3 of the GNU Affero General Public License into a
   3477      single combined work, and to convey the resulting work.  The terms
   3478      of this License will continue to apply to the part which is the
   3479      covered work, but the special requirements of the GNU Affero
   3480      General Public License, section 13, concerning interaction through
   3481      a network will apply to the combination as such.
   3482 
   3483   14. Revised Versions of this License.
   3484 
   3485      The Free Software Foundation may publish revised and/or new
   3486      versions of the GNU General Public License from time to time.  Such
   3487      new versions will be similar in spirit to the present version, but
   3488      may differ in detail to address new problems or concerns.
   3489 
   3490      Each version is given a distinguishing version number.  If the
   3491      Program specifies that a certain numbered version of the GNU
   3492      General Public License “or any later version” applies to it, you
   3493      have the option of following the terms and conditions either of
   3494      that numbered version or of any later version published by the Free
   3495      Software Foundation.  If the Program does not specify a version
   3496      number of the GNU General Public License, you may choose any
   3497      version ever published by the Free Software Foundation.
   3498 
   3499      If the Program specifies that a proxy can decide which future
   3500      versions of the GNU General Public License can be used, that
   3501      proxy’s public statement of acceptance of a version permanently
   3502      authorizes you to choose that version for the Program.
   3503 
   3504      Later license versions may give you additional or different
   3505      permissions.  However, no additional obligations are imposed on any
   3506      author or copyright holder as a result of your choosing to follow a
   3507      later version.
   3508 
   3509   15. Disclaimer of Warranty.
   3510 
   3511      THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
   3512      APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE
   3513      COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS”
   3514      WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
   3515      INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
   3516      MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE
   3517      RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.
   3518      SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
   3519      NECESSARY SERVICING, REPAIR OR CORRECTION.
   3520 
   3521   16. Limitation of Liability.
   3522 
   3523      IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
   3524      WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES
   3525      AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR
   3526      DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
   3527      CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
   3528      THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA
   3529      BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
   3530      PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
   3531      PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF
   3532      THE POSSIBILITY OF SUCH DAMAGES.
   3533 
   3534   17. Interpretation of Sections 15 and 16.
   3535 
   3536      If the disclaimer of warranty and limitation of liability provided
   3537      above cannot be given local legal effect according to their terms,
   3538      reviewing courts shall apply local law that most closely
   3539      approximates an absolute waiver of all civil liability in
   3540      connection with the Program, unless a warranty or assumption of
   3541      liability accompanies a copy of the Program in return for a fee.
   3542 
   3543 END OF TERMS AND CONDITIONS
   3544 ===========================
   3545 
   3546 How to Apply These Terms to Your New Programs
   3547 =============================================
   3548 
   3549 If you develop a new program, and you want it to be of the greatest
   3550 possible use to the public, the best way to achieve this is to make it
   3551 free software which everyone can redistribute and change under these
   3552 terms.
   3553 
   3554    To do so, attach the following notices to the program.  It is safest
   3555 to attach them to the start of each source file to most effectively
   3556 state the exclusion of warranty; and each file should have at least the
   3557 “copyright” line and a pointer to where the full notice is found.
   3558 
   3559      ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
   3560      Copyright (C) YEAR NAME OF AUTHOR
   3561 
   3562      This program is free software: you can redistribute it and/or modify
   3563      it under the terms of the GNU General Public License as published by
   3564      the Free Software Foundation, either version 3 of the License, or (at
   3565      your option) any later version.
   3566 
   3567      This program is distributed in the hope that it will be useful, but
   3568      WITHOUT ANY WARRANTY; without even the implied warranty of
   3569      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   3570      General Public License for more details.
   3571 
   3572      You should have received a copy of the GNU General Public License
   3573      along with this program.  If not, see <https://www.gnu.org/licenses/>.
   3574 
   3575    Also add information on how to contact you by electronic and paper
   3576 mail.
   3577 
   3578    If the program does terminal interaction, make it output a short
   3579 notice like this when it starts in an interactive mode:
   3580 
   3581      PROGRAM Copyright (C) YEAR NAME OF AUTHOR
   3582      This program comes with ABSOLUTELY NO WARRANTY; for details type ‘show w’.
   3583      This is free software, and you are welcome to redistribute it
   3584      under certain conditions; type ‘show c’ for details.
   3585 
   3586    The hypothetical commands ‘show w’ and ‘show c’ should show the
   3587 appropriate parts of the General Public License.  Of course, your
   3588 program’s commands might be different; for a GUI interface, you would
   3589 use an “about box”.
   3590 
   3591    You should also get your employer (if you work as a programmer) or
   3592 school, if any, to sign a “copyright disclaimer” for the program, if
   3593 necessary.  For more information on this, and how to apply and follow
   3594 the GNU GPL, see <https://www.gnu.org/licenses/>.
   3595 
   3596    The GNU General Public License does not permit incorporating your
   3597 program into proprietary programs.  If your program is a subroutine
   3598 library, you may consider it more useful to permit linking proprietary
   3599 applications with the library.  If this is what you want to do, use the
   3600 GNU Lesser General Public License instead of this License.  But first,
   3601 please read <https://www.gnu.org/licenses/why-not-lgpl.html>.
   3602 
   3603 
   3604 
   3605 Tag Table:
   3606 Node: Top763
   3607 Node: Introduction3049
   3608 Ref: Some things that Transient can do3577
   3609 Ref: Complexity in CLI programs3930
   3610 Ref: Using Transient for composing interactive commands4531
   3611 Node: Usage6773
   3612 Node: Invoking Transients7141
   3613 Node: Aborting and Resuming Transients8310
   3614 Node: Common Suffix Commands10931
   3615 Node: Saving Values12638
   3616 Ref: Saving Values-Footnote-114042
   3617 Node: Using History14235
   3618 Node: Getting Help for Suffix Commands15941
   3619 Node: Enabling and Disabling Suffixes17319
   3620 Node: Other Commands20607
   3621 Node: Configuration21583
   3622 Ref: Essential Options21863
   3623 Ref: Accessibility Options28693
   3624 Ref: Auxiliary Options29016
   3625 Ref: Developer Options33594
   3626 Ref: Hook Variables34842
   3627 Node: Modifying Existing Transients35129
   3628 Node: Defining New Commands39321
   3629 Node: Technical Introduction39738
   3630 Node: Defining Transients45438
   3631 Node: Binding Suffix and Infix Commands47905
   3632 Node: Group Specifications48763
   3633 Node: Suffix Specifications55314
   3634 Node: Defining Suffix and Infix Commands59527
   3635 Node: Using Infix Arguments62575
   3636 Node: Current Suffix Command64968
   3637 Node: Current Prefix Command67328
   3638 Node: Transient State69884
   3639 Ref: Pre-commands for Infixes74700
   3640 Ref: Pre-commands for Suffixes75220
   3641 Ref: Pre-commands for Non-Suffixes77674
   3642 Ref: Special Pre-Commands78810
   3643 Node: Classes and Methods79318
   3644 Node: Group Classes81405
   3645 Node: Group Methods83332
   3646 Node: Prefix Classes84592
   3647 Node: Suffix Classes85437
   3648 Node: Prefix Methods89313
   3649 Node: Suffix Methods91706
   3650 Node: Suffix Value Methods92027
   3651 Node: Suffix Format Methods94846
   3652 Node: Prefix Slots97848
   3653 Ref: Value and Scope97998
   3654 Ref: Behavior99477
   3655 Ref: Appearance100818
   3656 Ref: Documentation101477
   3657 Ref: Internal102097
   3658 Node: Suffix Slots103452
   3659 Ref: Slots of transient-child103820
   3660 Ref: Slots of transient-suffix104141
   3661 Ref: Slots of transient-infix105714
   3662 Ref: Slots of transient-variable109010
   3663 Ref: Slots of transient-switches109112
   3664 Node: Predicate Slots109475
   3665 Node: FAQ111820
   3666 Ref: Can I control how the popup buffer is displayed?111949
   3667 Ref: How can I copy text from the popup buffer?112276
   3668 Ref: How can I autoload prefix and suffix commands?112770
   3669 Ref: How does Transient compare to prefix keys and universal arguments?113244
   3670 Ref: How does Transient compare to Magit-Popup and Hydra?113487
   3671 Ref: Why did some of the key bindings change?113681
   3672 Ref: Why does q not quit popups anymore?116034
   3673 Node: Keystroke Index117137
   3674 Node: Command and Function Index119002
   3675 Node: Variable Index126638
   3676 Node: Concept Index129206
   3677 Node: GNU General Public License131942
   3678 
   3679 End Tag Table
   3680 
   3681 
   3682 Local Variables:
   3683 coding: utf-8
   3684 End: