Add repeat functionality

This commit is contained in:
Condorra 2024-08-18 20:58:50 +10:00
parent c2bd680299
commit c117482d4f
2 changed files with 16 additions and 5 deletions

View File

@ -25,7 +25,7 @@ fn reentrant_command_handler(
match command.split_out_command() {
None => (),
Some((cmd, rest)) => {
if cmd.starts_with('#') {
if let ("#", command_rest) = cmd.split_at(1) {
if cmd == "##" {
match lua_state.execute(debrace(&join(rest.arguments.iter(), " "))) {
Ok(()) => (),
@ -34,9 +34,17 @@ fn reentrant_command_handler(
.unwrap_or(())
}
}
} else if let Ok(repeat_count) = command_rest.parse::<u16>() {
for _ in 0..repeat_count {
reentrant_command_handler(
lua_state,
globals,
term_frame,
&join(rest.arguments.iter(), " "),
);
}
} else {
let cmd = &cmd[1..];
match lua_state.execute_command(cmd, &rest.arguments) {
match lua_state.execute_command(command_rest, &rest.arguments) {
Ok(()) => (),
Err(msg) => {
echo_to_term_frame(globals, term_frame, &format!("{}\r\n", msg))

View File

@ -58,8 +58,11 @@ impl LuaState {
.try_enter(|ctx| {
let commands =
Table::from_value(ctx, ctx.get_global(ctx.intern_static(b"commands")))?;
let command_fn =
Function::from_value(ctx, commands.get(ctx, ctx.intern(command.as_bytes())))?;
let command_value: Value = commands.get(ctx, ctx.intern(command.as_bytes()));
if command_value.is_nil() {
Err(anyhow::Error::msg("Unknown command"))?;
}
let command_fn = Function::from_value(ctx, command_value)?;
ctx.fetch(&self.exec).restart(
ctx,
command_fn,