fixed examples 0.3.0
This commit is contained in:
parent
66f2d04d5c
commit
f4d2ab4feb
@ -10,12 +10,15 @@
|
||||
//! ```
|
||||
//!
|
||||
//! - Run program with: `cargo run`
|
||||
extern crate crossterm;
|
||||
//extern crate crossterm;
|
||||
|
||||
mod color;
|
||||
mod cursor;
|
||||
mod terminal;
|
||||
// mod terminal;
|
||||
// mod color;
|
||||
// mod cursor;
|
||||
// mod crossterm_type;
|
||||
|
||||
fn main() {
|
||||
// some code to try out the examples.
|
||||
fn main()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
|
@ -11,7 +11,7 @@ use self::crossterm::Context;
|
||||
/// print some red font | demonstration.
|
||||
pub fn paint_foreground() {
|
||||
let context = Context::new();
|
||||
let terminal = terminal::terminal(context.clone());
|
||||
let terminal = terminal::terminal(&context);
|
||||
|
||||
// Pass an string to the `paint()` method with you want to paint.
|
||||
// This will give you an object back wits can be styled and displayed.
|
||||
@ -28,7 +28,7 @@ pub fn paint_foreground() {
|
||||
/// print some font on red background | demonstration.
|
||||
pub fn paint_background() {
|
||||
let context = Context::new();
|
||||
let terminal = terminal::terminal(context.clone());
|
||||
let terminal = terminal::terminal(&context);
|
||||
|
||||
// Pass an string to the `paint()` method with you want to paint.
|
||||
// This will give you an object back wits can be styled and displayed.
|
||||
@ -45,7 +45,7 @@ pub fn paint_background() {
|
||||
/// print font with fore- background color | demonstration.
|
||||
pub fn paint_foreground_and_background() {
|
||||
let context = Context::new();
|
||||
let terminal = terminal::terminal(context.clone());
|
||||
let terminal = terminal::terminal(&context);
|
||||
|
||||
// Pass an string to the `paint()` method with you want to paint.
|
||||
// This will give you an object back wits can be styled and displayed.
|
||||
@ -76,7 +76,7 @@ pub fn paint_foreground_and_background() {
|
||||
/// Print all available foreground colors | demonstration.
|
||||
pub fn print_all_foreground_colors() {
|
||||
let context = Context::new();
|
||||
let terminal = terminal::terminal(context.clone());
|
||||
let terminal = terminal::terminal(&context);
|
||||
|
||||
println!("Black : \t {}", terminal.paint("■").with(Color::Black));
|
||||
println!("Red : \t\t {}", terminal.paint("■").with(Color::Red));
|
||||
@ -119,7 +119,7 @@ pub fn print_all_foreground_colors() {
|
||||
/// Print all available foreground colors | demonstration.
|
||||
pub fn print_all_background_colors() {
|
||||
let context = Context::new();
|
||||
let terminal = terminal::terminal(context.clone());
|
||||
let terminal = terminal::terminal(&context);
|
||||
|
||||
println!("Black : \t {}", terminal.paint(" ").on(Color::Black));
|
||||
println!("Red : \t\t {}", terminal.paint(" ").on(Color::Red));
|
||||
@ -171,7 +171,7 @@ pub fn print_all_background_colors() {
|
||||
#[cfg(unix)]
|
||||
pub fn print_font_with_attributes() {
|
||||
let context = Context::new();
|
||||
let terminal = terminal::terminal(context.clone());
|
||||
let terminal = terminal::terminal(&context);
|
||||
|
||||
println!("{}", terminal.paint("Normal text"));
|
||||
println!("{}", terminal.paint("Bold text").bold());
|
||||
@ -189,9 +189,9 @@ pub fn print_font_with_attributes() {
|
||||
#[cfg(unix)]
|
||||
pub fn print_supported_colors() {
|
||||
let context = Context::new();
|
||||
let terminal = terminal::terminal(context.clone());
|
||||
let terminal = terminal::terminal(&context);
|
||||
|
||||
let count = crossterm::style::color(context.clone())
|
||||
let count = crossterm::style::color(&context)
|
||||
.get_available_color_count()
|
||||
.unwrap();
|
||||
|
||||
|
@ -11,7 +11,7 @@ pub fn goto() {
|
||||
let context = Context::new();
|
||||
|
||||
// Get the cursor
|
||||
let mut cursor = cursor(context.clone());
|
||||
let mut cursor = cursor(&context);
|
||||
// Set the cursor to position X: 10, Y: 5 in the terminal
|
||||
cursor.goto(10, 5);
|
||||
}
|
||||
@ -21,7 +21,7 @@ pub fn pos() {
|
||||
let context = Context::new();
|
||||
|
||||
// Get the cursor
|
||||
let mut cursor = cursor(context.clone());
|
||||
let mut cursor = cursor(&context);
|
||||
// get the cursor position.
|
||||
let (x, y) = cursor.pos();
|
||||
}
|
||||
@ -31,9 +31,10 @@ pub fn move_up() {
|
||||
let context = Context::new();
|
||||
|
||||
// Get the cursor
|
||||
let mut cursor = cursor(context.clone());
|
||||
let mut cursor = cursor(&context);
|
||||
|
||||
// Move the cursor to position 3 times to the up in the terminal
|
||||
cursor.move_up(3);
|
||||
cursor.move_up(10);
|
||||
}
|
||||
|
||||
/// Move the cursor 3 to the right | demonstration.
|
||||
@ -41,7 +42,7 @@ pub fn move_right() {
|
||||
let context = Context::new();
|
||||
|
||||
// Get the cursor
|
||||
let mut cursor = cursor(context.clone());
|
||||
let mut cursor = cursor(&context);
|
||||
// Move the cursor to position 3 times to the right in the terminal
|
||||
cursor.move_right(3);
|
||||
}
|
||||
@ -51,7 +52,7 @@ pub fn move_down() {
|
||||
let context = Context::new();
|
||||
|
||||
// Get the cursor
|
||||
let mut cursor = cursor(context.clone());
|
||||
let mut cursor = cursor(&context);
|
||||
// Move the cursor to position 3 times to the down in the terminal
|
||||
cursor.move_down(3);
|
||||
}
|
||||
@ -61,7 +62,7 @@ pub fn move_left() {
|
||||
let context = Context::new();
|
||||
|
||||
// Get the cursor
|
||||
let mut cursor = cursor(context.clone());
|
||||
let mut cursor = cursor(&context);
|
||||
// Move the cursor to position 3 times to the left in the terminal
|
||||
cursor.move_left(3);
|
||||
}
|
||||
@ -73,7 +74,7 @@ pub fn print() {
|
||||
// To print an some displayable content on an certain position.
|
||||
|
||||
// Get the cursor
|
||||
let mut cursor = cursor(context.clone());
|
||||
let mut cursor = cursor(&context);
|
||||
// Set the cursor to position X: 10, Y: 5 in the terminal
|
||||
cursor.goto(10, 5);
|
||||
// Print the @ symbol at position X: 10, Y: 5 in the terminal
|
||||
@ -96,7 +97,7 @@ pub fn print() {
|
||||
pub fn safe_and_reset_position() {
|
||||
let context = Context::new();
|
||||
|
||||
let mut cursor = cursor(context.clone());
|
||||
let mut cursor = cursor(&context);
|
||||
|
||||
// Goto X: 5 Y: 5
|
||||
cursor.goto(5, 5);
|
||||
@ -118,7 +119,7 @@ pub fn safe_and_reset_position() {
|
||||
pub fn hide_cursor() {
|
||||
let context = Context::new();
|
||||
|
||||
let cursor = cursor(context.clone());
|
||||
let cursor = cursor(&context);
|
||||
cursor.hide();
|
||||
}
|
||||
|
||||
@ -126,7 +127,7 @@ pub fn hide_cursor() {
|
||||
pub fn show_cursor() {
|
||||
let context = Context::new();
|
||||
|
||||
let cursor = cursor(context.clone());
|
||||
let cursor = cursor(&context);
|
||||
cursor.show();
|
||||
}
|
||||
|
||||
@ -134,7 +135,7 @@ pub fn show_cursor() {
|
||||
pub fn blink_cursor() {
|
||||
let context = Context::new();
|
||||
|
||||
let cursor = cursor(context.clone());
|
||||
let cursor = cursor(&context);
|
||||
cursor.blink(false);
|
||||
cursor.blink(false);
|
||||
}
|
||||
|
@ -11,10 +11,10 @@ use std::rc::Rc;
|
||||
use std::{thread, time};
|
||||
|
||||
fn print_wait_screen(context: Rc<Context>) {
|
||||
let mut terminal = terminal::terminal(context.clone());
|
||||
let mut terminal = terminal::terminal(&context);
|
||||
terminal.clear(ClearType::All);
|
||||
|
||||
let mut cursor = cursor(context.clone());
|
||||
let mut cursor = cursor(&context);
|
||||
cursor.goto(0, 0);
|
||||
cursor.hide();
|
||||
|
||||
@ -56,7 +56,7 @@ pub fn print_wait_screen_on_alternate_window(context: Rc<Context>) {
|
||||
/// some stress test switch from and to alternate screen.
|
||||
pub fn switch_between_main_and_alternate_screen() {
|
||||
let context = Context::new();
|
||||
let mut cursor = cursor(context.clone());
|
||||
let mut cursor = cursor(&context);
|
||||
|
||||
{
|
||||
// create new alternate screen instance and switch to the alternate screen.
|
||||
|
@ -1,10 +1,8 @@
|
||||
/// Examples of actions that could be performed on the alternatescreen.
|
||||
/// !! Note that alternate screen only works on Unix and windows 10 systems. I am working on windows 7 support. !!
|
||||
pub mod alternate_screen;
|
||||
|
||||
/// Examples of actions that could be performed on the terminal.
|
||||
pub mod terminal;
|
||||
|
||||
/// Alternate screen is only supported for unix systems. Windows support will come later :).
|
||||
#[cfg(target_os = "unix")]
|
||||
// Raw screen
|
||||
pub mod raw_mode;
|
||||
|
@ -13,9 +13,9 @@ use crossterm::raw::IntoRawMode;
|
||||
|
||||
// raw screen is not working correctly currently
|
||||
fn print_wait_screen(context: Rc<Context>) {
|
||||
terminal::terminal(context.clone()).clear(ClearType::All);
|
||||
terminal::terminal(&context).clear(ClearType::All);
|
||||
|
||||
let mut cursor = cursor(context.clone());
|
||||
let mut cursor = cursor(&context);
|
||||
cursor.goto(0, 0).print("Welcome to the wait screen.");
|
||||
cursor
|
||||
.goto(0, 1)
|
||||
@ -44,7 +44,7 @@ pub fn print_wait_screen_on_alternate_window() {
|
||||
// then convert the output of the program to raw mode.
|
||||
// then print the wait screen on the alternate screen in raw mode.
|
||||
let mut screen = AlternateScreen::from(context.clone());
|
||||
let alternate_screen = screen.into_raw_mode(context.clone());
|
||||
let raw_screen = screen.into_raw_mode(context.clone());
|
||||
|
||||
// Print the wait screen.
|
||||
print_wait_screen(context.clone());
|
||||
|
@ -19,7 +19,7 @@ pub fn clear_all_lines() {
|
||||
let context = Context::new();
|
||||
|
||||
// Get terminal
|
||||
let mut terminal = terminal(context);
|
||||
let mut terminal = terminal(&context);
|
||||
|
||||
print_test_data();
|
||||
|
||||
@ -32,12 +32,12 @@ pub fn clear_from_cursor_down() {
|
||||
let context = Context::new();
|
||||
|
||||
// Get terminal
|
||||
let mut terminal = terminal(context.clone());
|
||||
let mut terminal = terminal(&context);
|
||||
|
||||
print_test_data();
|
||||
|
||||
// Set terminal cursor position (see example for more info).
|
||||
cursor::cursor(context.clone()).goto(4, 8);
|
||||
cursor::cursor(&context).goto(4, 8);
|
||||
|
||||
// Clear all cells from current cursor position down.
|
||||
terminal.clear(ClearType::FromCursorDown);
|
||||
@ -48,12 +48,12 @@ pub fn clear_from_cursor_up() {
|
||||
let context = Context::new();
|
||||
|
||||
// Get terminal
|
||||
let mut terminal = terminal(context.clone());
|
||||
let mut terminal = terminal(&context);
|
||||
|
||||
print_test_data();
|
||||
|
||||
// Set terminal cursor position (see example for more info).
|
||||
cursor::cursor(context.clone()).goto(4, 4);
|
||||
cursor::cursor(&context).goto(4, 4);
|
||||
|
||||
// Clear all cells from current cursor position down.
|
||||
terminal.clear(ClearType::FromCursorUp);
|
||||
@ -64,12 +64,12 @@ pub fn clear_current_line() {
|
||||
let context = Context::new();
|
||||
|
||||
// Get terminal
|
||||
let mut terminal = terminal(context.clone());
|
||||
let mut terminal = terminal(&context);
|
||||
|
||||
print_test_data();
|
||||
|
||||
// Set terminal cursor position (see example for more info).
|
||||
cursor::cursor(context.clone()).goto(4, 4);
|
||||
cursor::cursor(&context).goto(4, 4);
|
||||
|
||||
// Clear current line cells.
|
||||
terminal.clear(ClearType::CurrentLine);
|
||||
@ -80,12 +80,12 @@ pub fn clear_until_new_line() {
|
||||
let context = Context::new();
|
||||
|
||||
// Get terminal
|
||||
let mut terminal = terminal(context.clone());
|
||||
let mut terminal = terminal(&context);
|
||||
|
||||
print_test_data();
|
||||
|
||||
// Set terminal cursor position (see example for more info).
|
||||
cursor::cursor(context.clone()).goto(4, 20);
|
||||
cursor::cursor(&context).goto(4, 20);
|
||||
|
||||
// Clear all the cells until next line.
|
||||
terminal.clear(ClearType::UntilNewLine);
|
||||
@ -96,7 +96,7 @@ pub fn print_terminal_size() {
|
||||
let context = Context::new();
|
||||
|
||||
// Get terminal
|
||||
let mut terminal = terminal(context.clone());
|
||||
let mut terminal = terminal(&context);
|
||||
// Get terminal size
|
||||
let terminal_size = terminal.terminal_size();
|
||||
// Print results
|
||||
@ -107,7 +107,7 @@ pub fn print_terminal_size() {
|
||||
pub fn set_terminal_size() {
|
||||
let context = Context::new();
|
||||
|
||||
let mut terminal = terminal(context);
|
||||
let mut terminal = terminal(&context);
|
||||
|
||||
terminal.set_size(10, 10);
|
||||
}
|
||||
@ -117,8 +117,11 @@ pub fn scroll_down() {
|
||||
let context = Context::new();
|
||||
|
||||
print_test_data();
|
||||
|
||||
|
||||
|
||||
// Get terminal
|
||||
let mut terminal = terminal(context.clone());
|
||||
let mut terminal = terminal(&context);
|
||||
// Scroll down 10 lines.
|
||||
terminal.scroll_down(10);
|
||||
}
|
||||
@ -130,9 +133,9 @@ pub fn scroll_up() {
|
||||
print_test_data();
|
||||
|
||||
// Get terminal
|
||||
let mut terminal = terminal(context.clone());
|
||||
let mut terminal = terminal(&context);
|
||||
// Scroll up 10 lines.
|
||||
terminal.scroll_up(10);
|
||||
terminal.scroll_up(5);
|
||||
}
|
||||
|
||||
/// Resize the terminal to X: 10, Y: 10 | demonstration.
|
||||
@ -140,7 +143,8 @@ pub fn resize_terminal() {
|
||||
let context = Context::new();
|
||||
|
||||
// Get terminal
|
||||
let mut terminal = terminal(context.clone());
|
||||
let mut terminal = terminal(&context);
|
||||
|
||||
// Get terminal size
|
||||
terminal.set_size(10, 10);
|
||||
}
|
||||
@ -150,7 +154,7 @@ pub fn exit() {
|
||||
let context = Context::new();
|
||||
|
||||
// Get terminal
|
||||
let mut terminal = terminal(context.clone());
|
||||
let mut terminal = terminal(&context);
|
||||
// Get terminal size
|
||||
terminal.exit();
|
||||
}
|
||||
|
@ -104,7 +104,7 @@ pub fn get_console_screen_buffer_info(
|
||||
let mut csbi = CONSOLE_SCREEN_BUFFER_INFO::empty();
|
||||
let success;
|
||||
|
||||
unsafe { success = GetConsoleScreenBufferInfo(get_output_handle(), &mut csbi) }
|
||||
unsafe { success = GetConsoleScreenBufferInfo(get_current_handle(screen_manager), &mut csbi) }
|
||||
|
||||
if success == 0 {
|
||||
panic!("Cannot get console screen buffer info");
|
||||
|
@ -54,8 +54,9 @@ pub fn get_module<T>(winapi_impl: T, unix_impl: T) -> Option<T> {
|
||||
use kernel::windows_kernel::ansi_support::try_enable_ansi_support;
|
||||
|
||||
// Try to enable ansi on windows if not than use WINAPI.
|
||||
does_support = try_enable_ansi_support();
|
||||
// does_support = try_enable_ansi_support();
|
||||
|
||||
does_support = false;
|
||||
if !does_support {
|
||||
term = Some(winapi_impl);
|
||||
}
|
||||
|
@ -48,6 +48,7 @@ impl ITerminal for AnsiTerminal {
|
||||
fn scroll_up(&self, count: i16) {
|
||||
let mut screen = self.context.screen_manager.lock().unwrap();
|
||||
{
|
||||
panic!();
|
||||
screen.write_string(format!(csi!("{}S"), count));
|
||||
}
|
||||
}
|
||||
|
@ -41,23 +41,39 @@ impl ITerminal for WinApiTerminal {
|
||||
}
|
||||
|
||||
fn scroll_up(&self, count: i16) {
|
||||
// yet to be implemented
|
||||
let csbi = kernel::get_console_screen_buffer_info(&self.context.screen_manager);
|
||||
|
||||
// Set srctWindow to the current window size and location.
|
||||
let mut srct_window = csbi.srWindow;
|
||||
|
||||
|
||||
// Check whether the window is too close to the screen buffer top
|
||||
if srct_window.Top >= count {
|
||||
srct_window.Top -= count; // move top down
|
||||
srct_window.Bottom = count; // move bottom down
|
||||
|
||||
let success = kernel::set_console_info(false, &mut srct_window, &self.context.screen_manager);
|
||||
if success {
|
||||
panic!("Something went wrong when scrolling down");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn scroll_down(&self, count: i16) {
|
||||
let csbi = kernel::get_console_screen_buffer_info(&self.context.screen_manager);
|
||||
let mut srct_window;
|
||||
|
||||
let csbi = kernel::get_console_screen_buffer_info(&self.context.screen_manager);
|
||||
// Set srctWindow to the current window size and location.
|
||||
srct_window = csbi.srWindow;
|
||||
let mut srct_window = csbi.srWindow;
|
||||
|
||||
panic!("window top: {} , window bottom: {} | {}, {}", srct_window.Top, srct_window.Bottom, csbi.dwSize.Y, csbi.dwSize.X);
|
||||
|
||||
// Check whether the window is too close to the screen buffer top
|
||||
if srct_window.Bottom < csbi.dwSize.Y - count {
|
||||
srct_window.Top += count; // move top down
|
||||
srct_window.Bottom += count; // move bottom down
|
||||
|
||||
let success =
|
||||
kernel::set_console_info(true, &mut srct_window, &self.context.screen_manager);
|
||||
let success = kernel::set_console_info(false, &mut srct_window, &self.context.screen_manager);
|
||||
|
||||
if success {
|
||||
panic!("Something went wrong when scrolling down");
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user