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