From 48eb0d47925586a9dadea577fad607776631b4ab Mon Sep 17 00:00:00 2001 From: Alex Vinyals Date: Wed, 9 Aug 2023 03:56:55 +0200 Subject: [PATCH] Enhance :toggle to support cycling numbers (#7877) --- helix-term/src/commands/typed.rs | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/helix-term/src/commands/typed.rs b/helix-term/src/commands/typed.rs index 5bb9c6c41..463bce259 100644 --- a/helix-term/src/commands/typed.rs +++ b/helix-term/src/commands/typed.rs @@ -1856,14 +1856,29 @@ fn toggle_option( .to_string(), ) } - Value::Null | Value::Object(_) | Value::Array(_) | Value::Number(_) => { + Value::Number(ref value) => { + ensure!( + args.len() > 2, + "Bad arguments. For number configurations use: `:toggle key val1 val2 ...`", + ); + + Value::Number( + args[1..] + .iter() + .skip_while(|&e| value.to_string() != *e.to_string()) + .nth(1) + .unwrap_or_else(|| &args[1]) + .parse()?, + ) + } + Value::Null | Value::Object(_) | Value::Array(_) => { anyhow::bail!("Configuration {key} does not support toggle yet") } }; let status = format!("'{key}' is now set to {value}"); let config = serde_json::from_value(config) - .map_err(|_| anyhow::anyhow!("Could not parse field: `{:?}`", &args))?; + .map_err(|err| anyhow::anyhow!("Cannot parse `{:?}`, {}", &args, err))?; cx.editor .config_events