Skip to content

Suffix Classes

  • All suffix and infix classes derive from transient-suffix, which in turn derives from transient-child, from which transient-group also derives (see Group Classes).

  • All infix classes derive from the abstract transient-infix class, which in turn derives from the transient-suffix class.

    Infixes are a special type of suffixes. The primary difference is that infixes always use the transient--do-stay pre-command, while non-infix suffixes use a variety of pre-commands (see Transient State). Doing that is most easily achieved by using this class, though theoretically it would be possible to define an infix class that does not do so. If you do that then you get to implement many methods.

    Also, infixes and non-infix suffixes are usually defined using different macros (see Defining Suffix and Infix Commands).

  • Classes used for infix commands that represent arguments should be derived from the abstract transient-argument class.

  • The transient-switch class (or a derived class) is used for infix arguments that represent command-line switches (arguments that do not take a value).

  • The transient-option class (or a derived class) is used for infix arguments that represent command-line options (arguments that do take a value).

  • The transient-switches class can be used for a set of mutually exclusive command-line switches.

  • The transient-files class can be used for a ‘--’ argument that indicates that all remaining arguments are files.

  • Classes used for infix commands that represent variables should derived from the abstract transient-variable class.

  • The transient-information class is special in that suffixes that use this class are not associated with a command and thus also not with any key binding. Such suffixes are only used to display arbitrary information, and that anywhere a suffix can appear. Display-only suffix specifications take this form:

    emacs-lisp
    ([LEVEL] :info DESCRIPTION [KEYWORD VALUE]...)

    The :info keyword argument replaces the :description keyword used for other suffix classes. Other keyword arguments that you might want to set, include :face, predicate keywords (such as :if), and :format. By default the value of :format includes %k, which for this class is replaced with the empty string or spaces, if keys are being padded in the containing group.

Magit defines additional classes, which can serve as examples for the fancy things you can do without modifying Transient. Some of these classes will likely get generalized and added to Transient. For now they are very much subject to change and not documented.