mirror of
https://github.com/ClementTsang/bottom
synced 2024-11-26 06:00:21 +00:00
Add double tap key timeout to prevent accidental dd's
This commit is contained in:
parent
f8209c9162
commit
bd37915567
3 changed files with 29 additions and 0 deletions
26
src/app.rs
26
src/app.rs
|
@ -1,5 +1,8 @@
|
|||
pub mod data_collection;
|
||||
use data_collection::{processes, temperature};
|
||||
use std::time::Instant;
|
||||
|
||||
use crate::constants;
|
||||
|
||||
mod process_killer;
|
||||
|
||||
|
@ -41,6 +44,7 @@ pub struct App {
|
|||
pub use_dot: bool,
|
||||
pub show_help: bool,
|
||||
pub is_frozen: bool,
|
||||
last_key_press: Instant,
|
||||
}
|
||||
|
||||
impl App {
|
||||
|
@ -66,20 +70,36 @@ impl App {
|
|||
use_dot,
|
||||
show_help: false,
|
||||
is_frozen: false,
|
||||
last_key_press: Instant::now(),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn reset(&mut self) {
|
||||
self.reset_multi_tap_keys();
|
||||
}
|
||||
|
||||
fn reset_multi_tap_keys(&mut self) {
|
||||
self.awaiting_second_d = false;
|
||||
}
|
||||
|
||||
pub fn on_enter(&mut self) {}
|
||||
|
||||
pub fn on_esc(&mut self) {
|
||||
if self.show_help {
|
||||
self.show_help = false;
|
||||
}
|
||||
self.awaiting_second_d = false;
|
||||
}
|
||||
|
||||
// TODO: How should we make it for process panel specific hotkeys? Only if we're on process panel? Or what?
|
||||
pub fn on_key(&mut self, c: char) {
|
||||
if !self.show_help {
|
||||
let current_key_press_inst = Instant::now();
|
||||
if current_key_press_inst.duration_since(self.last_key_press).as_millis() > constants::MAX_KEY_TIMEOUT_IN_MILLISECONDS {
|
||||
self.reset_multi_tap_keys();
|
||||
}
|
||||
self.last_key_press = current_key_press_inst;
|
||||
|
||||
match c {
|
||||
'd' => {
|
||||
if self.awaiting_second_d {
|
||||
|
@ -170,6 +190,7 @@ impl App {
|
|||
ApplicationPosition::TEMP => ApplicationPosition::MEM,
|
||||
_ => self.current_application_position,
|
||||
};
|
||||
self.awaiting_second_d = false;
|
||||
}
|
||||
|
||||
pub fn on_right(&mut self) {
|
||||
|
@ -178,6 +199,7 @@ impl App {
|
|||
ApplicationPosition::NETWORK => ApplicationPosition::PROCESS,
|
||||
_ => self.current_application_position,
|
||||
};
|
||||
self.awaiting_second_d = false;
|
||||
}
|
||||
|
||||
pub fn on_up(&mut self) {
|
||||
|
@ -189,6 +211,7 @@ impl App {
|
|||
ApplicationPosition::DISK => ApplicationPosition::TEMP,
|
||||
_ => self.current_application_position,
|
||||
};
|
||||
self.awaiting_second_d = false;
|
||||
}
|
||||
|
||||
pub fn on_down(&mut self) {
|
||||
|
@ -199,6 +222,7 @@ impl App {
|
|||
ApplicationPosition::DISK => ApplicationPosition::PROCESS,
|
||||
_ => self.current_application_position,
|
||||
};
|
||||
self.awaiting_second_d = false;
|
||||
}
|
||||
|
||||
pub fn decrement_position_count(&mut self) {
|
||||
|
@ -209,6 +233,7 @@ impl App {
|
|||
_ => {}
|
||||
}
|
||||
self.scroll_direction = ScrollDirection::UP;
|
||||
self.awaiting_second_d = false;
|
||||
}
|
||||
|
||||
pub fn increment_position_count(&mut self) {
|
||||
|
@ -219,6 +244,7 @@ impl App {
|
|||
_ => {}
|
||||
}
|
||||
self.scroll_direction = ScrollDirection::DOWN;
|
||||
self.awaiting_second_d = false;
|
||||
}
|
||||
|
||||
fn change_process_position(&mut self, num_to_change_by: i64) {
|
||||
|
|
|
@ -3,3 +3,4 @@ pub const STALE_MAX_MILLISECONDS: u64 = 180 * 1000; // We wish to store at most
|
|||
pub const TIME_STARTS_FROM: u64 = 60 * 1000; // TODO: Fix this
|
||||
pub const TICK_RATE_IN_MILLISECONDS: u64 = 200; // We use this as it's a good value to work with.
|
||||
pub const DEFAULT_REFRESH_RATE_IN_MILLISECONDS: u128 = 1000;
|
||||
pub const MAX_KEY_TIMEOUT_IN_MILLISECONDS: u128 = 1000;
|
||||
|
|
|
@ -60,6 +60,7 @@ fn main() -> error::Result<()> {
|
|||
)
|
||||
(@arg RATE_MILLIS: -r --rate +takes_value "Sets a refresh rate in milliseconds; the minimum is 250ms, defaults to 1000ms. Smaller values may take more resources.")
|
||||
//(@arg CONFIG_LOCATION: -co --config +takes_value "Sets the location of the config file. Expects a config file in the JSON format.")
|
||||
//(@arg BASIC_MODE: -b --basic "Sets bottom to basic mode, not showing graphs and only showing basic tables.")
|
||||
)
|
||||
.get_matches();
|
||||
|
||||
|
@ -223,6 +224,7 @@ fn main() -> error::Result<()> {
|
|||
debug!("Sent reset message.");
|
||||
}
|
||||
debug!("Resetting begins...");
|
||||
app.reset();
|
||||
}
|
||||
KeyEvent::Up => app.decrement_position_count(),
|
||||
KeyEvent::Down => app.increment_position_count(),
|
||||
|
|
Loading…
Reference in a new issue