Suffix and group objects share some predicate slots that control whether a group or suffix should be available depending on some state. Only one of these slots can be used at the same time. It is undefined what happens if you use more than one.
ifEnable if predicate returns non-nil.
if-notEnable if predicate returns nil.
if-non-nilEnable if variable’s value is non-nil.
if-nilEnable if variable’s value is nil.
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.
One more slot is shared between group and suffix classes,
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
level controls whether a suffix or a group should be
available depending on user preference.
See Enabling and Disabling Suffixes.