aboutsummaryrefslogtreecommitdiff
path: root/helix-view
diff options
context:
space:
mode:
authorGokul Soumya2022-06-21 16:46:50 +0000
committerGitHub2022-06-21 16:46:50 +0000
commit8b67acf130e12cf8aaa439fe19ea7b8917db300b (patch)
tree7f53afaae727a23c664347ec932fd16693359609 /helix-view
parent8ad0b83e306ff6dfc1499d3e6d25b2fd36a096a4 (diff)
Format keys identically in statusline and command palette (#2790)
The command palette previously used + as a delimiter for denoting a single key in a key sequence, (like C+w). This was at odds with how the statusline displayed them with pending keys (like <C-w>). This patch changes the palette formatting to the statusline formatting
Diffstat (limited to 'helix-view')
-rw-r--r--helix-view/src/input.rs27
1 files changed, 26 insertions, 1 deletions
diff --git a/helix-view/src/input.rs b/helix-view/src/input.rs
index 5b867930..093006c4 100644
--- a/helix-view/src/input.rs
+++ b/helix-view/src/input.rs
@@ -1,6 +1,6 @@
//! Input event handling, currently backed by crossterm.
use anyhow::{anyhow, Error};
-use helix_core::unicode::width::UnicodeWidthStr;
+use helix_core::unicode::{segmentation::UnicodeSegmentation, width::UnicodeWidthStr};
use serde::de::{self, Deserialize, Deserializer};
use std::fmt;
@@ -22,6 +22,31 @@ impl KeyEvent {
_ => None,
}
}
+
+ /// Format the key in such a way that a concatenated sequence
+ /// of keys can be read easily.
+ ///
+ /// ```
+ /// # use std::str::FromStr;
+ /// # use helix_view::input::KeyEvent;
+ ///
+ /// let k = KeyEvent::from_str("w").unwrap().key_sequence_format();
+ /// assert_eq!(k, "w");
+ ///
+ /// let k = KeyEvent::from_str("C-w").unwrap().key_sequence_format();
+ /// assert_eq!(k, "<C-w>");
+ ///
+ /// let k = KeyEvent::from_str(" ").unwrap().key_sequence_format();
+ /// assert_eq!(k, "<space>");
+ /// ```
+ pub fn key_sequence_format(&self) -> String {
+ let s = self.to_string();
+ if s.graphemes(true).count() > 1 {
+ format!("<{}>", s)
+ } else {
+ s
+ }
+ }
}
pub(crate) mod keys {