diff options
Diffstat (limited to 'helix-view/src/info.rs')
-rw-r--r-- | helix-view/src/info.rs | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/helix-view/src/info.rs b/helix-view/src/info.rs index f3df50fe..70e934cd 100644 --- a/helix-view/src/info.rs +++ b/helix-view/src/info.rs @@ -5,9 +5,9 @@ use std::fmt::Write; #[derive(Debug)] /// Info box used in editor. Rendering logic will be in other crate. pub struct Info { - /// Title kept as static str for now. - pub title: &'static str, - /// Text body, should contains newline. + /// Title shown at top. + pub title: String, + /// Text body, should contain newlines. pub text: String, /// Body width. pub width: u16, @@ -16,17 +16,20 @@ pub struct Info { } impl Info { - pub fn key(title: &'static str, body: Vec<(&[KeyEvent], &'static str)>) -> Info { + // body is a BTreeMap instead of a HashMap because keymaps are represented + // with nested hashmaps with no ordering, and each invocation of infobox would + // show different orders of items + pub fn key(title: &str, body: Vec<(&str, Vec<KeyEvent>)>) -> Info { let (lpad, mpad, rpad) = (1, 2, 1); let keymaps_width: u16 = body .iter() - .map(|r| r.0.iter().map(|e| e.width() as u16 + 2).sum::<u16>() - 2) + .map(|r| r.1.iter().map(|e| e.width() as u16 + 2).sum::<u16>() - 2) .max() .unwrap(); let mut text = String::new(); let mut width = 0; let height = body.len() as u16; - for (keyevents, desc) in body { + for (desc, keyevents) in body { let keyevent = keyevents[0]; let mut left = keymaps_width - keyevent.width() as u16; for _ in 0..lpad { @@ -48,7 +51,7 @@ impl Info { writeln!(text, "{}", desc).ok(); } Info { - title, + title: title.to_string(), text, width, height, |