More fixes for Windows.
This commit is contained in:
parent
9df0b2e4e2
commit
a24e5dbbcf
18
src/app.rs
18
src/app.rs
|
@ -36,11 +36,12 @@ pub struct App {
|
||||||
pub data : data_collection::Data,
|
pub data : data_collection::Data,
|
||||||
pub scroll_direction : ScrollDirection,
|
pub scroll_direction : ScrollDirection,
|
||||||
pub previous_process_position : i64,
|
pub previous_process_position : i64,
|
||||||
awaiting_d : bool,
|
awaiting_second_d : bool,
|
||||||
|
pub use_dot : bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl App {
|
impl App {
|
||||||
pub fn new(show_average_cpu : bool, temperature_type : temperature::TemperatureType, update_rate_in_milliseconds : u64) -> App {
|
pub fn new(show_average_cpu : bool, temperature_type : temperature::TemperatureType, update_rate_in_milliseconds : u64, use_dot : bool) -> App {
|
||||||
App {
|
App {
|
||||||
process_sorting_type : processes::ProcessSorting::CPU,
|
process_sorting_type : processes::ProcessSorting::CPU,
|
||||||
should_quit : false,
|
should_quit : false,
|
||||||
|
@ -57,7 +58,8 @@ impl App {
|
||||||
data : data_collection::Data::default(),
|
data : data_collection::Data::default(),
|
||||||
scroll_direction : ScrollDirection::DOWN,
|
scroll_direction : ScrollDirection::DOWN,
|
||||||
previous_process_position : 0,
|
previous_process_position : 0,
|
||||||
awaiting_d : false,
|
awaiting_second_d : false,
|
||||||
|
use_dot,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -65,12 +67,12 @@ impl App {
|
||||||
match c {
|
match c {
|
||||||
'q' => self.should_quit = true,
|
'q' => self.should_quit = true,
|
||||||
'd' => {
|
'd' => {
|
||||||
if self.awaiting_d {
|
if self.awaiting_second_d {
|
||||||
self.awaiting_d = false;
|
self.awaiting_second_d = false;
|
||||||
self.kill_highlighted_process().unwrap_or(()); // TODO: Should this be handled?
|
self.kill_highlighted_process().unwrap_or(()); // TODO: Should this be handled?
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
self.awaiting_d = true;
|
self.awaiting_second_d = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
'c' => {
|
'c' => {
|
||||||
|
@ -121,8 +123,8 @@ impl App {
|
||||||
_ => {}
|
_ => {}
|
||||||
}
|
}
|
||||||
|
|
||||||
if self.awaiting_d && c != 'd' {
|
if self.awaiting_second_d && c != 'd' {
|
||||||
self.awaiting_d = false;
|
self.awaiting_second_d = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,6 @@ const TEXT_COLOUR : Color = Color::Gray;
|
||||||
const GRAPH_COLOUR : Color = Color::Gray;
|
const GRAPH_COLOUR : Color = Color::Gray;
|
||||||
const BORDER_STYLE_COLOUR : Color = Color::Gray;
|
const BORDER_STYLE_COLOUR : Color = Color::Gray;
|
||||||
const HIGHLIGHTED_BORDER_STYLE_COLOUR : Color = Color::LightBlue;
|
const HIGHLIGHTED_BORDER_STYLE_COLOUR : Color = Color::LightBlue;
|
||||||
const GRAPH_MARKER : Marker = Marker::Braille;
|
|
||||||
|
|
||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
pub struct CanvasData {
|
pub struct CanvasData {
|
||||||
|
@ -88,7 +87,7 @@ pub fn draw_data<B : backend::Backend>(terminal : &mut Terminal<B>, app_state :
|
||||||
dataset_vector.push(
|
dataset_vector.push(
|
||||||
Dataset::default()
|
Dataset::default()
|
||||||
.name(&cpu.0)
|
.name(&cpu.0)
|
||||||
.marker(GRAPH_MARKER)
|
.marker(if (&app_state).use_dot { Marker::Dot } else { Marker::Braille })
|
||||||
.style(Style::default().fg(COLOUR_LIST[i - avg_cpu_exist_offset % COLOUR_LIST.len()]))
|
.style(Style::default().fg(COLOUR_LIST[i - avg_cpu_exist_offset % COLOUR_LIST.len()]))
|
||||||
.data(&(cpu.1)),
|
.data(&(cpu.1)),
|
||||||
);
|
);
|
||||||
|
@ -98,7 +97,7 @@ pub fn draw_data<B : backend::Backend>(terminal : &mut Terminal<B>, app_state :
|
||||||
dataset_vector.push(
|
dataset_vector.push(
|
||||||
Dataset::default()
|
Dataset::default()
|
||||||
.name(&canvas_data.cpu_data[0].0)
|
.name(&canvas_data.cpu_data[0].0)
|
||||||
.marker(GRAPH_MARKER)
|
.marker(if (&app_state).use_dot { Marker::Dot } else { Marker::Braille })
|
||||||
.style(Style::default().fg(COLOUR_LIST[canvas_data.cpu_data.len() - 1 % COLOUR_LIST.len()]))
|
.style(Style::default().fg(COLOUR_LIST[canvas_data.cpu_data.len() - 1 % COLOUR_LIST.len()]))
|
||||||
.data(&(canvas_data.cpu_data[0].1)),
|
.data(&(canvas_data.cpu_data[0].1)),
|
||||||
);
|
);
|
||||||
|
@ -139,12 +138,12 @@ pub fn draw_data<B : backend::Backend>(terminal : &mut Terminal<B>, app_state :
|
||||||
.datasets(&[
|
.datasets(&[
|
||||||
Dataset::default()
|
Dataset::default()
|
||||||
.name(&("RAM:".to_string() + &format!("{:3}%", (canvas_data.mem_data.last().unwrap_or(&(0_f64, 0_f64)).1.round() as u64))))
|
.name(&("RAM:".to_string() + &format!("{:3}%", (canvas_data.mem_data.last().unwrap_or(&(0_f64, 0_f64)).1.round() as u64))))
|
||||||
.marker(GRAPH_MARKER)
|
.marker(if (&app_state).use_dot { Marker::Dot } else { Marker::Braille })
|
||||||
.style(Style::default().fg(Color::LightBlue))
|
.style(Style::default().fg(Color::LightBlue))
|
||||||
.data(&canvas_data.mem_data),
|
.data(&canvas_data.mem_data),
|
||||||
Dataset::default()
|
Dataset::default()
|
||||||
.name(&("SWP:".to_string() + &format!("{:3}%", (canvas_data.swap_data.last().unwrap_or(&(0_f64, 0_f64)).1.round() as u64))))
|
.name(&("SWP:".to_string() + &format!("{:3}%", (canvas_data.swap_data.last().unwrap_or(&(0_f64, 0_f64)).1.round() as u64))))
|
||||||
.marker(GRAPH_MARKER)
|
.marker(if (&app_state).use_dot { Marker::Dot } else { Marker::Braille })
|
||||||
.style(Style::default().fg(Color::LightYellow))
|
.style(Style::default().fg(Color::LightYellow))
|
||||||
.data(&canvas_data.swap_data),
|
.data(&canvas_data.swap_data),
|
||||||
])
|
])
|
||||||
|
@ -215,12 +214,12 @@ pub fn draw_data<B : backend::Backend>(terminal : &mut Terminal<B>, app_state :
|
||||||
.datasets(&[
|
.datasets(&[
|
||||||
Dataset::default()
|
Dataset::default()
|
||||||
.name(&(canvas_data.rx_display))
|
.name(&(canvas_data.rx_display))
|
||||||
.marker(GRAPH_MARKER)
|
.marker(if (&app_state).use_dot { Marker::Dot } else { Marker::Braille })
|
||||||
.style(Style::default().fg(Color::LightBlue))
|
.style(Style::default().fg(Color::LightBlue))
|
||||||
.data(&canvas_data.network_data_rx),
|
.data(&canvas_data.network_data_rx),
|
||||||
Dataset::default()
|
Dataset::default()
|
||||||
.name(&(canvas_data.tx_display))
|
.name(&(canvas_data.tx_display))
|
||||||
.marker(GRAPH_MARKER)
|
.marker(if (&app_state).use_dot { Marker::Dot } else { Marker::Braille })
|
||||||
.style(Style::default().fg(Color::LightYellow))
|
.style(Style::default().fg(Color::LightYellow))
|
||||||
.data(&canvas_data.network_data_tx),
|
.data(&canvas_data.network_data_tx),
|
||||||
])
|
])
|
||||||
|
|
23
src/main.rs
23
src/main.rs
|
@ -7,13 +7,8 @@ extern crate clap;
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate failure;
|
extern crate failure;
|
||||||
|
|
||||||
use crossterm::{input, queue, AlternateScreen, InputEvent, KeyEvent, MouseButton, MouseEvent};
|
use crossterm::{input, AlternateScreen, InputEvent, KeyEvent, MouseButton, MouseEvent};
|
||||||
use std::{
|
use std::{io::stdout, sync::mpsc, thread, time::Duration};
|
||||||
io::{stdout, Write},
|
|
||||||
sync::mpsc,
|
|
||||||
thread,
|
|
||||||
time::Duration,
|
|
||||||
};
|
|
||||||
use tui_temp_fork::{backend::CrosstermBackend, Terminal};
|
use tui_temp_fork::{backend::CrosstermBackend, Terminal};
|
||||||
|
|
||||||
pub mod app;
|
pub mod app;
|
||||||
|
@ -49,6 +44,7 @@ fn main() -> error::Result<()> {
|
||||||
(about: crate_description!())
|
(about: crate_description!())
|
||||||
//(@arg THEME: -t --theme +takes_value "Sets a colour theme.")
|
//(@arg THEME: -t --theme +takes_value "Sets a colour theme.")
|
||||||
(@arg AVG_CPU: -a --avgcpu "Enables showing the average CPU usage.")
|
(@arg AVG_CPU: -a --avgcpu "Enables showing the average CPU usage.")
|
||||||
|
(@arg DOT_MARKER: -m --dot_marker "Use a dot marker instead of the default braille marker. May be needed in things like Powershell.")
|
||||||
//(@arg DEBUG: -d --debug "Enables debug mode.") // TODO: This isn't done yet!
|
//(@arg DEBUG: -d --debug "Enables debug mode.") // TODO: This isn't done yet!
|
||||||
(@group TEMPERATURE_TYPE =>
|
(@group TEMPERATURE_TYPE =>
|
||||||
(@arg CELSIUS : -c --celsius "Sets the temperature type to Celsius. This is the default option.")
|
(@arg CELSIUS : -c --celsius "Sets the temperature type to Celsius. This is the default option.")
|
||||||
|
@ -83,20 +79,14 @@ fn main() -> error::Result<()> {
|
||||||
data_collection::temperature::TemperatureType::Celsius
|
data_collection::temperature::TemperatureType::Celsius
|
||||||
};
|
};
|
||||||
let show_average_cpu = matches.is_present("AVG_CPU");
|
let show_average_cpu = matches.is_present("AVG_CPU");
|
||||||
|
let use_dot = matches.is_present("DOT_MARKER");
|
||||||
|
|
||||||
// Create "app" struct, which will control most of the program and store settings/state
|
// Create "app" struct, which will control most of the program and store settings/state
|
||||||
let mut app = app::App::new(show_average_cpu, temperature_type, update_rate_in_milliseconds as u64);
|
let mut app = app::App::new(show_average_cpu, temperature_type, update_rate_in_milliseconds as u64, use_dot);
|
||||||
|
|
||||||
// Set up up tui and crossterm
|
// Set up up tui and crossterm
|
||||||
let screen = AlternateScreen::to_alternate(true)?;
|
let screen = AlternateScreen::to_alternate(true)?;
|
||||||
let mut stdout = stdout();
|
let stdout = stdout();
|
||||||
|
|
||||||
if cfg!(target_os = "windows") {
|
|
||||||
screen.to_main()?;
|
|
||||||
crossterm::RawScreen::into_raw_mode()?;
|
|
||||||
queue!(stdout, crossterm::Clear(crossterm::ClearType::All), crossterm::BlinkOff)?;
|
|
||||||
stdout.flush()?;
|
|
||||||
}
|
|
||||||
|
|
||||||
let backend = CrosstermBackend::with_alternate_screen(stdout, screen)?;
|
let backend = CrosstermBackend::with_alternate_screen(stdout, screen)?;
|
||||||
let mut terminal = Terminal::new(backend)?;
|
let mut terminal = Terminal::new(backend)?;
|
||||||
|
@ -129,7 +119,6 @@ fn main() -> error::Result<()> {
|
||||||
_ => {}
|
_ => {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
thread::sleep(Duration::from_millis(50));
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue