diff options
author | Manos Pitsidianakis <el13635@mail.ntua.gr> | 2019-03-03 14:24:15 +0200 |
---|---|---|
committer | Manos Pitsidianakis <el13635@mail.ntua.gr> | 2019-06-10 19:40:39 +0300 |
commit | d4c64916f0efdad4774503e5bae4e86ba40770fa (patch) | |
tree | 5dbb79e06af92060d20718ed8167e7517c39bdc8 /ui/src/types/keys.rs | |
parent | 1bb1cf7aac639b6bb6df89b3a091bebb61a4462b (diff) |
Add configurable shortcuts for compact mail listing
concerns #63
Diffstat (limited to 'ui/src/types/keys.rs')
-rw-r--r-- | ui/src/types/keys.rs | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/ui/src/types/keys.rs b/ui/src/types/keys.rs index 335e856e..6be97782 100644 --- a/ui/src/types/keys.rs +++ b/ui/src/types/keys.rs @@ -19,6 +19,7 @@ * along with meli. If not, see <http://www.gnu.org/licenses/>. */ +use super::*; use chan; use std::fmt; use std::io; @@ -199,3 +200,47 @@ derive_csi_sequence!("End Bracketed Paste Mode", BracketModeEnd, "?2003l"); pub const BRACKET_PASTE_START: &[u8] = b"\x1B[200~"; pub const BRACKET_PASTE_END: &[u8] = b"\x1B[201~"; + +const FIELDS: &'static [&'static str] = &[]; + + +impl<'de> Deserialize<'de> for Key { + fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> + where + D: Deserializer<'de>, + { + struct KeyVisitor; + + impl<'de> Visitor<'de> for KeyVisitor { + type Value = Key; + + fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result { + formatter.write_str("`secs` or `nanos`") + } + + fn visit_str<E>(self, value: &str) -> Result<Key, E> + where + E: de::Error, + { + match value { + "Backspace" => Ok(Key::Backspace), + "Left" => Ok(Key::Left), + "Right" => Ok(Key::Right), + "Up" => Ok(Key::Up), + "Down" => Ok(Key::Down), + "Home" => Ok(Key::Home), + "End" => Ok(Key::End), + "PageUp" => Ok(Key::PageUp), + "PageDown" => Ok(Key::PageDown), + "Delete" => Ok(Key::Delete), + "Insert" => Ok(Key::Insert), + "Esc" => Ok(Key::Esc), + ref s if s.len() == 1 => Ok(Key::Char(s.chars().nth(0).unwrap())), + _ => Err(de::Error::unknown_field(value, FIELDS)), + } + } + } + + deserializer.deserialize_identifier(KeyVisitor) + } +} |