aboutsummaryrefslogtreecommitdiff
path: root/helix-view/src
diff options
context:
space:
mode:
Diffstat (limited to 'helix-view/src')
-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 {