1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
use {
    crossterm::{
        event::{
            KeyCode,
            KeyEvent,
            KeyModifiers,
        },
    },
    std::fmt,
};

/// An escape sequence made of key events
///
/// Termimad's event source currently offers no
/// guarantee *all* escape sequences are really
/// catched. If you find a problem please contact
/// me.
/// Note also that some escape sequence never
/// come this high, being catched by crossterm
/// before.
#[derive(Debug, Clone, Default, PartialEq, Eq)]
pub struct EscapeSequence {
    pub keys: Vec<KeyEvent>,
}

impl fmt::Display for EscapeSequence {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        for key in &self.keys {
            if let KeyEvent { code: KeyCode::Char(c), modifiers: KeyModifiers::NONE } = key {
                write!(f, "{}", c)?;
            }
        }
        Ok(())
    }
}