Disallow macro keybindings within command sequences

This is a temporary limitation because of the way that command sequences
are executed. Each command is currently executed back-to-back
synchronously, but macros are by design queued up for the compositor.
So macros mixed into a command sequence will behave undesirably: they
will be executed after the rest of the static and/or typable commands
in the sequence.

This is pending a larger refactor of how we handle commands.
<https://redirect.github.com/helix-editor/helix/issues/5555> has
further details and <https://redirect.github.com/helix-editor/helix/issues/4508>
discusses a similar problem faced by the command palette.
This commit is contained in:
Michael Davis 2024-02-13 18:11:57 -05:00 committed by Blaž Hrastnik
parent 1098a348aa
commit b7820ee668

View File

@ -177,6 +177,19 @@ fn visit_seq<S>(self, mut seq: S) -> Result<Self::Value, S::Error>
.map_err(serde::de::Error::custom)?, .map_err(serde::de::Error::custom)?,
) )
} }
// Prevent macro keybindings from being used in command sequences.
// This is meant to be a temporary restriction pending a larger
// refactor of how command sequences are executed.
if commands
.iter()
.any(|cmd| matches!(cmd, MappableCommand::Macro { .. }))
{
return Err(serde::de::Error::custom(
"macro keybindings may not be used in command sequences",
));
}
Ok(KeyTrie::Sequence(commands)) Ok(KeyTrie::Sequence(commands))
} }