config

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

transient.info (158810B)


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