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 36 37 38 39 40 41 42 43 44 45 46 47
//! This trait defines the actions that can be preformed with the terminal cursor. //! This trait can be implemented so that an concrete implementation of the ITerminalCursor can for fill //! the wishes to work on an specific platform. //! //! ## For example: //! //! This trait is implemented to work with WINAPI (Windows specific) and ANSI (Unix specific), //! so that the cursor related actions can be preformed on both unix and windows systems. //! mod cursor; #[cfg(target_os = "windows")] mod winapi_cursor; mod ansi_cursor; #[cfg(target_os = "windows")] use self::winapi_cursor::WinApiCursor; use self::ansi_cursor::AnsiCursor; pub use self::cursor::{ cursor, TerminalCursor }; ///! This trait defines the actions that can be preformed with the terminal cursor. ///! This trait can be implemented so that an concrete implementation of the ITerminalCursor can forfill ///! the wishes to work on an specific platform. ///! ///! ## For example: ///! ///! This trait is implemented for `WINAPI` (Windows specific) and `ANSI` (Unix specific), ///! so that cursor related actions can be preformed on both unix and windows systems. pub trait ITerminalCursor { /// Goto some location (x,y) in the terminal. fn goto(&self, x: u16, y: u16); /// Get the location (x,y) of the current curor in the terminal fn pos(&self) -> (u16, u16); /// Move cursor n times up fn move_up(&self, count: u16); /// Move the cursor `n` times to the right. fn move_right(&self, count: u16); /// Move the cursor `n` times down. fn move_down(&self, count: u16); /// Move the cursor `n` times left. fn move_left(&self, count: u16); /// Save cursor position for recall later. Note that this position is stored program based not per instance of the cursor struct. fn save_position(&mut self); /// Return to saved cursor position fn reset_position(&self); }