minicrossterm/src/terminal/ansi_terminal.rs

59 lines
1.8 KiB
Rust
Raw Normal View History

//! This is an `ANSI escape code` specific implementation for terminal related action.
//! This module is used for windows 10 terminals and unix terminals by default.
2018-07-10 03:37:07 +10:00
use super::super::cursor::cursor;
2018-07-22 22:55:14 +10:00
use super::{ClearType, ITerminal, Rc};
2018-07-02 06:43:43 +10:00
use shared::functions;
2018-07-28 17:54:05 +10:00
use ScreenManager;
/// This struct is an ansi implementation for terminal related actions.
2018-07-28 17:54:05 +10:00
pub struct AnsiTerminal;
impl AnsiTerminal {
2018-07-28 17:54:05 +10:00
pub fn new() -> AnsiTerminal {
AnsiTerminal {}
}
}
impl ITerminal for AnsiTerminal {
2018-07-28 17:54:05 +10:00
fn clear(&self, clear_type: ClearType, screen_manager: &ScreenManager) {
match clear_type {
ClearType::All => {
screen_manager.write_str(csi!("2J"));
}
ClearType::FromCursorDown => {
screen_manager.write_str(csi!("J"));
}
ClearType::FromCursorUp => {
screen_manager.write_str(csi!("1J"));
}
ClearType::CurrentLine => {
screen_manager.write_str(csi!("2K"));
}
ClearType::UntilNewLine => {
screen_manager.write_str(csi!("K"));
}
};
}
2018-07-28 17:54:05 +10:00
fn terminal_size(&self, screen_manager: &ScreenManager) -> (u16, u16) {
functions::get_terminal_size(&self.context.screen_manager)
}
2018-07-28 17:54:05 +10:00
fn scroll_up(&self, count: i16, screen_manager: &ScreenManager) {
screen_manager.write_string(format!(csi!("{}S"), count));
}
2018-07-28 17:54:05 +10:00
fn scroll_down(&self, count: i16, screen_manager: &ScreenManager) {
screen_manager.write_string(format!(csi!("{}T"), count));
}
2018-07-28 17:54:05 +10:00
fn set_size(&self, width: i16, height: i16, screen_manager: &ScreenManager) {
screen_manager.write_string(format!(csi!("8;{};{}t"), width, height));
}
2018-07-02 06:43:43 +10:00
fn exit(&self) {
2018-06-27 04:21:47 +10:00
functions::exit_terminal();
}
}