/* * meli - ui crate. * * Copyright 2017-2018 Manos Pitsidianakis * * This file is part of meli. * * meli is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * meli is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with meli. If not, see . */ extern crate serde; use self::serde::de::Visitor; use self::serde::{de, Deserialize, Deserializer}; extern crate unicode_segmentation; #[macro_use] mod position; #[macro_use] mod cells; #[macro_use] mod keys; pub mod embed; mod text_editing; pub use self::cells::*; pub use self::keys::*; pub use self::position::*; pub use self::text_editing::*; use std::fmt; /* * CSI events we use */ // Some macros taken from termion: /// Create a CSI-introduced sequence. macro_rules! csi { ($( $l:expr ),*) => { concat!("\x1b[", $( $l ),*) }; } /// Derive a CSI sequence struct. macro_rules! derive_csi_sequence { ($(#[$outer:meta])* ($name:ident, $value:expr)) => { $(#[$outer])* #[derive(Copy, Clone)] pub struct $name; impl fmt::Display for $name { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { write!(f, csi!($value)) } } impl AsRef<[u8]> for $name { fn as_ref(&self) -> &'static [u8] { csi!($value).as_bytes() } } impl AsRef for $name { fn as_ref(&self) -> &'static str { csi!($value) } } }; } /* derive_csi_sequence!( #[doc = ""] (DisableMouse, "?1000l") ); derive_csi_sequence!( #[doc = ""] (EnableMouse, "?1000h") ); */ derive_csi_sequence!( #[doc = "`CSI Ps ; Ps ; Ps t`, where `Ps = 2 2 ; 0` -> Save xterm icon and window title on stack."] (SaveWindowTitleIconToStack, "22;0t") ); derive_csi_sequence!( #[doc = "Restore window title and icon from terminal's title stack. `CSI Ps ; Ps ; Ps t`, where `Ps = 2 3 ; 0` -> Restore xterm icon and window title from stack."] (RestoreWindowTitleIconFromStack, "23;0t") ); derive_csi_sequence!( #[doc = "Empty struct with a Display implementation that returns the byte sequence to start [Bracketed Paste Mode](http://www.xfree86.org/current/ctlseqs.html#Bracketed%20Paste%20Mode)"] (BracketModeStart, "?2004h") ); derive_csi_sequence!( #[doc = "Empty struct with a Display implementation that returns the byte sequence to end [Bracketed Paste Mode](http://www.xfree86.org/current/ctlseqs.html#Bracketed%20Paste%20Mode)"] (BracketModeEnd, "?2004l") ); pub const BRACKET_PASTE_START: &[u8] = b"\x1B[200~"; pub const BRACKET_PASTE_END: &[u8] = b"\x1B[201~";