From d38603414f8ddce0c7ae0c6b5a6adcf43fbe9821 Mon Sep 17 00:00:00 2001 From: Marut K Date: Mon, 1 Jun 2026 19:00:30 +0700 Subject: [PATCH] docs(examples): consistent terminal output with print_config, add reload example - Add print_config helper that displays colored key symbols and help text - Fix terminal output to clear previous key press on both crossterm and termion backends - Add print_config calls to all examples showing available shortcuts - Add reload example demonstrating runtime config rotation via 'r' key - Update examples/README.md with capturing and reload entries - Add reload.tape --- Cargo.toml | 1 + README.md | 24 +++++++++++- examples/README.md | 9 +++++ examples/action.rs | 15 ++++---- examples/backend/crossterm.rs | 16 +++++++- examples/backend/mod.rs | 35 ++++++++++++----- examples/backend/termion.rs | 14 ++++++- examples/capturing.rs | 6 +-- examples/config.rs | 3 +- examples/derive.rs | 3 +- examples/derived_config.rs | 3 +- examples/modes.rs | 8 +++- examples/reload.gif | Bin 0 -> 96716 bytes examples/reload.rs | 69 ++++++++++++++++++++++++++++++++++ examples/reload.tape | 29 ++++++++++++++ examples/sequences.rs | 6 ++- examples/simple.rs | 1 + examples/wasm/src/main.rs | 6 +-- 18 files changed, 212 insertions(+), 36 deletions(-) create mode 100644 examples/reload.gif create mode 100644 examples/reload.rs create mode 100644 examples/reload.tape diff --git a/Cargo.toml b/Cargo.toml index cefc039..3355dd8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,6 +7,7 @@ documentation.workspace = true repository.workspace = true license.workspace = true edition.workspace = true +exclude = ["examples/*"] [lib] doctest = false diff --git a/README.md b/README.md index 235bbaa..cd4bfe9 100644 --- a/README.md +++ b/README.md @@ -58,6 +58,23 @@ See `keymap-rs` in action with the [WASM example](https://rezigned.com/keymap-rs +

+ + + + + + + + + + + +
Runtime Reload (Rebind keys at runtime)
+ Runtime keymap reload demo +
+

+ --- ## 📦 Installation @@ -120,8 +137,11 @@ let config = Action::keymap_config(); match config.get(&key) { Some(action) => match action { Action::Quit => break, - Action::Jump => println!("Jump! Symbol: {:?}, Help: {:?}", - action.keymap_item().symbol, action.keymap_item().help), + Action::Jump => println!( + "Jump! Symbol: {:?}, Help: {:?}", + action.keymap_item().symbol, + action.keymap_item().help) + ), _ => println!("Action: {action:?} - {}", action.keymap_item().description), } _ => {} diff --git a/examples/README.md b/examples/README.md index d93428b..50d46ea 100644 --- a/examples/README.md +++ b/examples/README.md @@ -32,6 +32,10 @@ Shows how to load key mappings exclusively from external configuration files, ig Explores combining derive macro defaults with external configuration overrides, covering configuration precedence and key group patterns like `@digit`. +### [`capturing.rs`](./capturing.rs) +**Key group capturing using `.get_bound()`** + +Demonstrates dynamic key capture with key group patterns like `@any`, `@digit`, `@alpha`, etc. The `Shoot(char)` variant captures the actual pressed character at runtime via `.get_bound()`. ### [`modes.rs`](./modes.rs) **Multi-mode application with different key mappings** @@ -43,6 +47,11 @@ Illustrates building applications with multiple modes (like `vim`), where differ Explains how to handle multi-key sequences (like `j j` for double-tap actions), including sequence detection, timing-based handling, and sequence timeout management. +### [`reload.rs`](./reload.rs) +**Runtime keymap reload** + +Demonstrates swapping key bindings at runtime by re-deserializing a `DerivedConfig` from inline TOML configs. Press `r` to rotate between predefined configuration sets. + --- ## WebAssembly Example diff --git a/examples/action.rs b/examples/action.rs index 4be3481..1dbd152 100644 --- a/examples/action.rs +++ b/examples/action.rs @@ -3,32 +3,31 @@ #[derive(Debug, keymap::KeyMap, Hash, PartialEq, Eq, Clone)] pub(crate) enum Action { /// Jump over obstacles - #[key("space", "@digit")] + #[key("space", "@digit", symbol = "␣", help = "jump")] Jump, /// Climb or move up - #[key("up")] + #[key("up", symbol = "↑", help = "move up")] Up, /// Drop or crouch down - #[key("down")] + #[key("down", symbol = "↓", help = "move down")] Down, /// Move leftward - #[key("left")] + #[key("left", symbol = "←", help = "move left")] Left, /// Move rightward - #[key("right")] + #[key("right", symbol = "→", help = "move right")] Right, /// Exit or pause game - #[key("q", "esc")] + #[key("q", "esc", symbol = "esc", help = "quit")] Quit, /// Key Group Capturing action (e.g. tracking which character was pressed). - /// `char` will be captured from any matched key group macro (like `@any` or `@digit`) at runtime. - #[key("@any")] + #[key("@any", help = "shoot")] Shoot(char), } diff --git a/examples/backend/crossterm.rs b/examples/backend/crossterm.rs index 5d196f7..b386f6d 100644 --- a/examples/backend/crossterm.rs +++ b/examples/backend/crossterm.rs @@ -1,9 +1,12 @@ use std::io; use crossterm::{ + cursor, event::{read, Event, KeyEvent}, - terminal::{disable_raw_mode, enable_raw_mode}, + execute, + terminal::{disable_raw_mode, enable_raw_mode, Clear, ClearType}, }; +use std::io::{stdout, Write}; #[allow(dead_code)] pub(crate) fn run(mut f: F) -> io::Result<()> @@ -11,10 +14,21 @@ where F: FnMut(KeyEvent) -> bool, { enable_raw_mode()?; + stdout().flush()?; + + let (_, row) = cursor::position()?; loop { if let Event::Key(key) = read()? { + execute!( + stdout(), + cursor::MoveTo(0, row), + Clear(ClearType::FromCursorDown), + )?; + let quit = f(key); + stdout().flush()?; + if quit { break; } diff --git a/examples/backend/mod.rs b/examples/backend/mod.rs index 932f061..a69d350 100644 --- a/examples/backend/mod.rs +++ b/examples/backend/mod.rs @@ -1,3 +1,5 @@ +use std::io::Write; + use keymap::Item; #[cfg(feature = "crossterm")] @@ -32,28 +34,41 @@ pub(crate) use mock::{run, Key}; #[allow(dead_code)] pub(crate) fn print(s: &str) -> bool { - println!("{s}\r"); + print!("\r{s}"); + std::io::stdout().flush().ok(); false } #[allow(dead_code)] pub(crate) fn quit(s: &str) -> bool { println!("{s}\r"); + std::io::stdout().flush().ok(); true } +// ANSI colors +const RESET: &str = "\x1b[0m"; +const COLOR_DIM: &str = "\x1b[38;2;68;72;85m"; +const COLOR_KEY: &str = "\x1b[38;2;148;226;213m"; +const COLOR_TEXT: &str = "\x1b[38;2;166;173;200m"; + #[allow(dead_code)] pub(crate) fn print_config(items: &[(T, Item)]) { - println!("--- keymap ---"); + let keys = items + .iter() + .map(|(_, v)| { + format!( + "{COLOR_KEY}{}{RESET} {COLOR_TEXT}{}{RESET}", + v.symbol.clone().unwrap_or_default(), + v.help.clone().unwrap_or(v.description.clone()) + ) + }) + .collect::>() + .join(&format!(" {COLOR_DIM}|{RESET} ")); - items.iter().for_each(|(action, v)| { - println!( - "{action:?} = keys: {:?}, description: {}", - v.keys, v.description - ) - }); - - println!("--------------"); + println!("\r{keys}"); + std::io::stdout().flush().ok(); } + #[allow(unused)] fn main() {} diff --git a/examples/backend/termion.rs b/examples/backend/termion.rs index b041e87..ccc5337 100644 --- a/examples/backend/termion.rs +++ b/examples/backend/termion.rs @@ -12,13 +12,23 @@ where let stdin = stdin(); let mut stdout = stdout().into_raw_mode()?; + write!(stdout, "{}", termion::cursor::Save)?; + stdout.flush()?; + for key in stdin.keys() { + write!( + stdout, + "{}{}", + termion::cursor::Restore, + termion::clear::AfterCursor, + )?; + let quit = f(key.unwrap()); + stdout.flush()?; + if quit { break; } - - stdout.flush().unwrap(); } write!(stdout, "{}", termion::cursor::Show) diff --git a/examples/capturing.rs b/examples/capturing.rs index a82dc09..db9e437 100644 --- a/examples/capturing.rs +++ b/examples/capturing.rs @@ -4,7 +4,7 @@ mod backend; #[path = "./action.rs"] mod action; -use crate::backend::{print, quit, run}; +use crate::backend::{print, print_config, quit, run}; use action::Action; use keymap::{DerivedConfig, KeyMapConfig}; @@ -16,11 +16,9 @@ Jump = { keys = ["j"], description = "Jump!" } fn main() -> std::io::Result<()> { println!("# Example: Key Group Capturing using .get_bound()"); - println!("- Press any key to see it captured by Action::Shoot(char)"); - println!("- Press 'j' to see Action::Jump (unit variant)"); - println!("- Press 'q' or 'esc' to quit"); let config: DerivedConfig = toml::from_str(CONFIG).unwrap(); + print_config(&config.items); run(|key| match config.get_bound(&key) { Some(action) => match action { diff --git a/examples/config.rs b/examples/config.rs index c9014b1..066f2d6 100644 --- a/examples/config.rs +++ b/examples/config.rs @@ -4,7 +4,7 @@ mod backend; #[path = "./action.rs"] mod action; -use crate::backend::{print, quit, run}; +use crate::backend::{print, print_config, quit, run}; use action::Action; use keymap::{Config, KeyMapConfig}; @@ -18,6 +18,7 @@ fn main() -> std::io::Result<()> { println!("# Example: External configuration with Config"); let config: Config = toml::from_str(CONFIG).unwrap(); + print_config(&config.items); // Use .get() for high-performance reference lookup of the "default" variant. // To capture the actual key pressed (e.g. the 'a' in @any), use .get_bound() diff --git a/examples/derive.rs b/examples/derive.rs index 1ee26f2..1dd0aad 100644 --- a/examples/derive.rs +++ b/examples/derive.rs @@ -4,13 +4,14 @@ mod backend; #[path = "./action.rs"] mod action; -use crate::backend::{print, quit, run}; +use crate::backend::{print, print_config, quit, run}; use action::Action; use keymap::KeyMapConfig; fn main() -> std::io::Result<()> { println!("# Example: Using the KeyMap derive macro"); let config = Action::keymap_config(); + print_config(&config.items); // Use .get() for high-performance reference lookup of the "default" variant. // To capture the actual key pressed (e.g. the 'a' in @any), use .get_bound() diff --git a/examples/derived_config.rs b/examples/derived_config.rs index 38e9f3b..77e87d4 100644 --- a/examples/derived_config.rs +++ b/examples/derived_config.rs @@ -4,7 +4,7 @@ mod backend; #[path = "./action.rs"] mod action; -use crate::backend::{print, quit, run}; +use crate::backend::{print, print_config, quit, run}; use action::Action; use keymap::{DerivedConfig, KeyMapConfig}; @@ -19,6 +19,7 @@ fn main() -> std::io::Result<()> { println!("# Example: Merging derive macros with external config using DerivedConfig"); let config: DerivedConfig = toml::from_str(CONFIG).unwrap(); + print_config(&config.items); // Use .get() for high-performance reference lookup of the "default" variant. // To capture the actual key pressed (e.g. the 'a' in @any), use .get_bound() diff --git a/examples/modes.rs b/examples/modes.rs index 8aa5c0d..9005c95 100644 --- a/examples/modes.rs +++ b/examples/modes.rs @@ -3,7 +3,7 @@ use std::collections::HashMap; #[path = "./backend/mod.rs"] mod backend; -use crate::backend::{print, quit, run}; +use crate::backend::{print, print_config, quit, run}; use keymap::DerivedConfig; use serde::Deserialize; @@ -45,7 +45,11 @@ fn main() -> std::io::Result<()> { let mut mode = "home"; println!("# Example: Multi-mode application with different key mappings"); - println!("mode: {mode}\r"); + + if let Some(Actions::Home(config)) = modes.get("home") { + print_config(&config.items); + } + println!("\rmode: {mode}"); run(move |key| match modes.get(mode).unwrap() { Actions::Home(config) => match config.get(&key) { diff --git a/examples/reload.gif b/examples/reload.gif new file mode 100644 index 0000000000000000000000000000000000000000..4b0afc927cb917bc8e3ba0287a1b746debe22a8d GIT binary patch literal 96716 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

;a;_nmdYWjCd_BFA#VZOamq4qmqF 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 literal 0 HcmV?d00001 diff --git a/examples/reload.rs b/examples/reload.rs new file mode 100644 index 0000000..94af50f --- /dev/null +++ b/examples/reload.rs @@ -0,0 +1,69 @@ +#[path = "./backend/mod.rs"] +mod backend; + +#[path = "./action.rs"] +mod action; + +use std::cell::RefCell; +use std::io::Write; + +use crate::backend::{print, print_config, quit, run}; +use action::Action; +use keymap::{DerivedConfig, KeyMap, KeyMapConfig, ToKeyMap}; + +// Multiple inline configs to switch between at runtime. +// Press 'r' to reload the keymap — the active config rotates on each reload. +const CONFIG_A: &str = r#" +Jump = { keys = ["j"] } +Up = { keys = ["k"] } +"#; + +const CONFIG_B: &str = r#" +Jump = { keys = ["w"] } +Down = { keys = ["s"] } +Left = { keys = ["a"] } +Right = { keys = ["d"] } +"#; + +fn main() -> std::io::Result<()> { + println!("# Example: Runtime keymap reload"); + println!("\rPress 'r' to rotate between configs at runtime"); + + let configs = [CONFIG_A, CONFIG_B]; + let config = RefCell::new(toml::from_str::>(configs[0]).unwrap()); + let active = RefCell::new(0usize); + + print_config(&config.borrow().items); + + let reload_key = KeyMap::from(keymap::node::Key::Char('r')); + + run(move |key| { + // Press 'r' to reload keymap from the next inline config + if let Ok(k) = key.to_keymap() { + if k == reload_key { + let next = (*active.borrow() + 1) % configs.len(); + *config.borrow_mut() = toml::from_str(configs[next]).unwrap(); + *active.borrow_mut() = next; + + // Replace the stale header shortcuts in-place + print!("\r\x1b[1A\x1b[J"); + std::io::stdout().flush().ok(); + print_config(&config.borrow().items); + print(&format!("** switched to config {next} **")); + return false; + } + } + + let config = config.borrow(); + match config.get(&key) { + Some(action) => match action { + Action::Quit => quit("quit!"), + Action::Shoot(_) => print("Shoot!"), + Action::Up | Action::Down | Action::Left | Action::Right | Action::Jump => print( + &format!("{action:?} = {}", action.keymap_item().description), + ), + }, + None => print(&format!("{key:?}")), + } + }) +} diff --git a/examples/reload.tape b/examples/reload.tape new file mode 100644 index 0000000..4fcc0f0 --- /dev/null +++ b/examples/reload.tape @@ -0,0 +1,29 @@ +Output examples/reload.gif + +Require + cargo + +Type "cargo run --example reload --features crossterm" +Enter +Sleep 1s + +Type "j" +Sleep 1s + +Type "k" +Sleep 1s + +# Press 'r' — rotate to CONFIG_B +Type "r" +Sleep 2s + +# From CONFIG_B +Type "w" +Sleep 1s + +Type "a" +Sleep 1s + +# Press 'q' — quit +Type "q" +Sleep 1s diff --git a/examples/sequences.rs b/examples/sequences.rs index 311d5e7..1a2ac56 100644 --- a/examples/sequences.rs +++ b/examples/sequences.rs @@ -6,22 +6,26 @@ mod action; use std::time::{Duration, Instant}; -use crate::backend::{print, quit, run, Key}; +use crate::backend::{print, print_config, quit, run, Key}; use action::Action; use keymap::{DerivedConfig, KeyMapConfig}; // Override default key mapping defined via #[derive(KeyMap)] in Action. pub(crate) const CONFIG: &str = r#" Jump = { keys = ["j j"], description = "Jump Jump!" } +Shoot = { keys = ["enter"] } "#; fn main() -> std::io::Result<()> { println!("# Example: Key Sequences (j j)"); + let config: DerivedConfig = toml::from_str(CONFIG).unwrap(); let mut last_key: Option = None; let mut last_time = Instant::now(); + print_config(&config.items); + run(move |key| { let ret = match config.get(&key) { Some(action) => match action { diff --git a/examples/simple.rs b/examples/simple.rs index e4c8446..ea2580c 100644 --- a/examples/simple.rs +++ b/examples/simple.rs @@ -35,6 +35,7 @@ esc = "Quit" fn main() -> std::io::Result<()> { let config: Config = toml::from_str(CONFIG).unwrap(); println!("# Example: Basic key mapping without derive macros"); + println!("\r↑ up | ↓ down | ← left | → right | ␣/^G jump | q/esc quit"); run(|key| { let Some((_, action)) = config.0.get_key_value(&key.to_keymap().unwrap()) else { diff --git a/examples/wasm/src/main.rs b/examples/wasm/src/main.rs index 2aa7b19..dcfec26 100644 --- a/examples/wasm/src/main.rs +++ b/examples/wasm/src/main.rs @@ -20,15 +20,15 @@ extern "C" { #[derive(Debug, Clone, keymap::KeyMap, Hash, PartialEq, Eq)] pub enum Action { /// Jump over obstacles - #[key("space", symbol = "↑", help = "jump")] // symbol gets overridden by toml config + #[key("space", symbol = "␣", help = "jump")] // symbol gets overridden by toml config Jump, /// Move leftward - #[key("left", help = "move left")] + #[key("left", symbol = "←", help = "move left")] Left, /// Move rightward - #[key("right", help = "move right")] + #[key("right", symbol = "→", help = "move right")] Right, /// Pause