Appendix A FAQ

A.1 Can I control how the popup buffer is displayed?

Yes, see transient-display-buffer-action in Configuration. You can also control how the popup buffer is displayed on a case-by-case basis by passing :display-action to transient-define-prefix.

A.2 How can I copy text from the popup buffer?

To be able to mark text in Transient’s popup buffer using the mouse, you have to add the below binding. Note that for technical reasons, the region won’t be visualized, while doing so. After you have quit the transient popup, you will be able to yank it in another buffer.

(keymap-set transient-predicate-map
            "<mouse-set-region>"
            #'transient--do-stay)

A.3 How can I autoload prefix and suffix commands?

If your package only supports Emacs 30, just prefix the definition with ;;;###autoload. If your package supports released versions of Emacs, you unfortunately have to use a long form autoload comment as described in (elisp)Autoload.

;;;###autoload (autoload 'magit-dispatch "magit" nil t)
(transient-define-prefix magit-dispatch ()
  ...)

A.4 How does Transient compare to prefix keys and universal arguments?

See https://github.com/magit/transient/wiki/Comparison-with-prefix-keys-and-universal-arguments.

A.5 How does Transient compare to Magit-Popup and Hydra?

See https://github.com/magit/transient/wiki/Comparison-with-other-packages.

A.6 Why does q not quit popups anymore?

I agree that q is a good binding for commands that quit something. This includes quitting whatever transient is currently active, but it also includes quitting whatever it is that some specific transient is controlling. The transient magit-blame for example binds q to the command that turns magit-blame-mode off.

So I had to decide if q should quit the active transient (like Magit-Popup used to) or whether C-g should do that instead, so that q could be bound in individual transient to whatever commands make sense for them. Because all other letters are already reserved for use by individual transients, I have decided to no longer make an exception for q.

If you want to get q’s old binding back then you can do so. Doing that is a bit more complicated than changing a single key binding, so I have implemented a function, transient-bind-q-to-quit that makes the necessary changes. See its documentation string for more information.