diff options
author | Sebastian Thiel <sebastian.thiel@icloud.com> | 2021-02-15 15:50:00 +0800 |
---|---|---|
committer | Sebastian Thiel <sebastian.thiel@icloud.com> | 2021-02-15 15:52:04 +0800 |
commit | 6d7b3cd062214f2cc66886d49d1a60406204abf3 (patch) | |
tree | 62b27f369453188b7bcda077185ac0fdd6fb3c6a | |
parent | 6ca9e6ca52a4d4d32036df2914ee773ab313397b (diff) |
Keep selecting the first element during iteration unless…
…the user provided input already.
Related to #77
-rw-r--r-- | src/interactive/app/eventloop.rs | 15 | ||||
-rw-r--r-- | src/main.rs | 4 |
2 files changed, 15 insertions, 4 deletions
diff --git a/src/interactive/app/eventloop.rs b/src/interactive/app/eventloop.rs index ed7c2ac..d18ff44 100644 --- a/src/interactive/app/eventloop.rs +++ b/src/interactive/app/eventloop.rs @@ -236,10 +236,14 @@ impl TerminalApp { }; let mut state = None::<AppState>; + let mut received_events = false; let traversal = Traversal::from_walk(options, input, |traversal| { let s = match state.as_mut() { Some(s) => { s.entries = sorted_entries(&traversal.tree, s.root, s.sorting); + if !received_events { + s.selected = s.entries.get(0).map(|b| b.index); + } s } None => { @@ -260,12 +264,15 @@ impl TerminalApp { } }; s.reset_message(); // force "scanning" to appear + let events = fetch_buffered_key_events(); + received_events |= !events.is_empty(); + let should_exit = match s.process_events( &mut window, traversal, &mut display, terminal, - fetch_buffered_key_events().into_iter(), + events.into_iter(), )? { ProcessingResult::ExitRequested(_) => true, ProcessingResult::Finished(_) => false, @@ -294,7 +301,11 @@ impl TerminalApp { }); s.is_scanning = false; s.entries = sorted_entries(&traversal.tree, s.root, s.sorting); - s.selected = s.selected.or_else(|| s.entries.get(0).map(|b| b.index)); + s.selected = if received_events { + s.selected.or_else(|| s.entries.get(0).map(|b| b.index)) + } else { + s.entries.get(0).map(|b| b.index) + }; s }, display, diff --git a/src/main.rs b/src/main.rs index d299e1a..ce2e728 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,5 +1,5 @@ #![forbid(unsafe_code)] -use anyhow::{anyhow, Result}; +use anyhow::Result; use clap::Clap; use dua::{ByteFormat, TraversalSorting}; use std::{fs, io, io::Write, path::PathBuf, process}; @@ -24,7 +24,7 @@ fn main() -> Result<()> { #[cfg(any(feature = "tui-unix", feature = "tui-crossplatform"))] Some(Interactive { input }) => { use crate::interactive::{Interaction, TerminalApp}; - use anyhow::Context; + use anyhow::{anyhow, Context}; use crosstermion::terminal::{tui::new_terminal, AlternateRawScreen}; let no_tty_msg = "Interactive mode requires a connected terminal"; |