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