Merge pull request #336 from jonathandturner/fix_rawkey_textview

Fix bug in textview with rawkey
This commit is contained in:
Jonathan Turner 2019-08-24 07:19:51 +12:00 committed by GitHub
commit 2d7e00a254
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 31 additions and 22 deletions

2
Cargo.lock generated
View File

@ -1912,7 +1912,7 @@ dependencies = [
[[package]] [[package]]
name = "nu" name = "nu"
version = "0.1.3" version = "0.2.0"
dependencies = [ dependencies = [
"adhoc_derive 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "adhoc_derive 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
"ansi_term 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", "ansi_term 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)",

View File

@ -151,13 +151,12 @@ fn scroll_view_lines_if_needed(draw_commands: Vec<DrawCommand>, use_color_buffer
// Only scroll if needed // Only scroll if needed
if max_bottom_line > height as usize { if max_bottom_line > height as usize {
loop { #[cfg(feature = "rawkey")]
#[cfg(feature = "rawkey")] {
{ let rawkey = rawkey::RawKey::new();
loop {
use std::{thread, time::Duration}; use std::{thread, time::Duration};
let rawkey = rawkey::RawKey::new();
if rawkey.is_pressed(rawkey::KeyCode::Escape) { if rawkey.is_pressed(rawkey::KeyCode::Escape) {
break; break;
} }
@ -194,12 +193,24 @@ fn scroll_view_lines_if_needed(draw_commands: Vec<DrawCommand>, use_color_buffer
paint_textview(&draw_commands, starting_row, use_color_buffer); paint_textview(&draw_commands, starting_row, use_color_buffer);
} }
thread::sleep(Duration::from_millis(50)); thread::sleep(Duration::from_millis(50));
let new_size = terminal.terminal_size();
if size != new_size {
size = new_size;
let _ = terminal.clear(crossterm::ClearType::All);
max_bottom_line =
paint_textview(&draw_commands, starting_row, use_color_buffer);
}
} }
let _ = cursor.show();
#[cfg(not(feature = "rawkey"))] #[allow(unused)]
{ let screen = RawScreen::disable_raw_mode();
use crossterm::{InputEvent, KeyEvent}; }
#[cfg(not(feature = "rawkey"))]
{
use crossterm::{InputEvent, KeyEvent};
loop {
if let Some(ref mut sync_stdin) = sync_stdin { if let Some(ref mut sync_stdin) = sync_stdin {
if let Some(ev) = sync_stdin.next() { if let Some(ev) = sync_stdin.next() {
match ev { match ev {
@ -255,25 +266,23 @@ fn scroll_view_lines_if_needed(draw_commands: Vec<DrawCommand>, use_color_buffer
} }
} }
} }
}
let new_size = terminal.terminal_size(); let new_size = terminal.terminal_size();
if size != new_size { if size != new_size {
size = new_size; size = new_size;
let _ = terminal.clear(crossterm::ClearType::All); let _ = terminal.clear(crossterm::ClearType::All);
max_bottom_line = max_bottom_line =
paint_textview(&draw_commands, starting_row, use_color_buffer); paint_textview(&draw_commands, starting_row, use_color_buffer);
}
} }
let _ = cursor.show();
#[allow(unused)]
let screen = RawScreen::disable_raw_mode();
} }
} }
} }
let cursor = cursor();
let _ = cursor.show();
#[allow(unused)]
let screen = RawScreen::disable_raw_mode();
println!(""); println!("");
} }