Appendix A FAQ

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

Yes, see transient-display-buffer-action in Configuration. You can also control how the menu 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 menu buffer?

You can select text in the menu buffer using the mouse, like in most other buffers, by clicking mouse-1 and keeping it pressed while dragging.

(Before v0.13.0, the above required additional configuration and the region was not visualized while dragging. This isn’t the case anymore, but explains why the following was once deemed necessary.)

Alternatively the command transient-copy-menu-text can be used to copy the complete content of the menu buffer. You have to add a binding for this command in transient-map.

(keymap-set transient-map "C-c C-w" #'transient-copy-menu-text)

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 older Emacs releases, 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.