dotemacs

My Emacs configuration
git clone git://git.entf.net/dotemacs
Log | Files | Refs | LICENSE

transient.info (159470B)


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