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