aboutsummaryrefslogtreecommitdiff
path: root/helix-view/src/info.rs
diff options
context:
space:
mode:
authorGokul Soumya2021-07-26 16:07:13 +0000
committerGitHub2021-07-26 16:07:13 +0000
commit88d6f652390922b389667f469b6d308db569bdaf (patch)
tree12d23bd03d89744880e87fca12f192e676272ee9 /helix-view/src/info.rs
parenta630fb5d2022b264bcac34317bbadd0973bd57d4 (diff)
Allow multi key remappings in config file (#454)
* Use tree like structure to store keymaps * Allow multi key keymaps in config file * Allow multi key keymaps in insert mode * Make keymap state self contained * Add keymap! macro for ergonomic declaration * Add descriptions for editor commands * Allow keymap! to take multiple keys * Restore infobox display * Fix keymap merging and add infobox titles * Fix and add tests for keymaps * Clean up comments and apply suggestions * Allow trailing commas in keymap! * Remove mode suffixes from keymaps * Preserve order of keys when showing infobox * Make command descriptions smaller * Strip infobox title prefix from items * Strip infobox title prefix from items
Diffstat (limited to 'helix-view/src/info.rs')
-rw-r--r--helix-view/src/info.rs17
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,