Predicate Slots
Suffix and group objects share two sets of predicate slots that control whether a group or suffix should be available depending on some state. Only one slot from each set can be used at the same time. It is undefined which slot is honored if you use more than one.
Predicates from the first group control whether the suffix is present in the menu at all.
ifEnable if predicate returns non-nil.if-notEnable if predicate returnsnil.if-non-nilEnable if variable’s value is non-nil.if-nilEnable if variable’s value isnil.if-modeEnable if major-mode matches value.if-not-modeEnable if major-mode does not match value.if-derivedEnable if major-mode derives from value.if-not-derivedEnable if major-mode does not derive from value.
Predicates from the second group control whether the suffix can be invoked. The suffix is shown in the menu regardless, but when it is considered "inapt", then it is grayed out to indicated that it currently cannot be invoked.
inapt-ifInapt if predicate returns non-nil.inapt-if-notInapt if predicate returnsnil.inapt-if-non-nilInapt if variable’s value is non-nil.inapt-if-nilInapt if variable’s value isnil.inapt-if-modeInapt if major-mode matches value.inapt-if-not-modeInapt if major-mode does not match value.inapt-if-derivedInapt if major-mode derives from value.inapt-if-not-derivedInapt if major-mode does not derive from value.
By default these predicates run when the prefix command is invoked, but this can be changes, using the refresh-suffixes prefix slot. See Prefix Slots.
One more slot is shared between group and suffix classes, level. Like the slots documented above, it is a predicate, but it is used for a different purpose. The value has to be an integer between 1 and 7. level controls whether a suffix or a group should be available depending on user preference. See Enabling and Disabling Suffixes.