diff options
author | Canop <cano.petrole@gmail.com> | 2019-12-19 15:06:21 +0100 |
---|---|---|
committer | Canop <cano.petrole@gmail.com> | 2019-12-19 15:06:21 +0100 |
commit | 7c5050ab77490bcd50731a4ea66f539039bdf7ef (patch) | |
tree | 7570f449157e60465985694281842c190267b868 /src/browser_states.rs | |
parent | 259dbb368ccc14f15cad8cc6df7c325dc605271e (diff) |
display possible verb completions in status line
Diffstat (limited to 'src/browser_states.rs')
-rw-r--r-- | src/browser_states.rs | 92 |
1 files changed, 53 insertions, 39 deletions
diff --git a/src/browser_states.rs b/src/browser_states.rs index 1d5782f..a322fdc 100644 --- a/src/browser_states.rs +++ b/src/browser_states.rs @@ -1,32 +1,33 @@ -use std::{ - fs::OpenOptions, - io::Write, - path::PathBuf, - time::Instant, +use { + crate::{ + app_context::AppContext, + app_state::{AppState, AppStateCmdResult}, + commands::{Action, Command}, + displayable_tree::DisplayableTree, + errors::{ProgramError, TreeBuildError}, + external::Launchable, + flat_tree::{LineType, Tree}, + help_states::HelpState, + io::W, + patterns::Pattern, + screens::{self, Screen}, + status::Status, + task_sync::TaskLifetime, + tree_build::TreeBuilder, + tree_options::{OptionBool, TreeOptions}, + verb_store::PrefixSearchResult, + verbs::VerbExecutor, + }, + minimad::Composite, + open, + std::{ + fs::OpenOptions, + io::Write, + path::PathBuf, + time::Instant, + }, }; -use open; -use minimad::Composite; - -use crate::{ - app_context::AppContext, - app_state::{AppState, AppStateCmdResult}, - commands::{Action, Command}, - displayable_tree::DisplayableTree, - errors::{ProgramError, TreeBuildError}, - external::Launchable, - flat_tree::{LineType, Tree}, - help_states::HelpState, - io::W, - patterns::Pattern, - screens::{self, Screen}, - status::Status, - task_sync::TaskLifetime, - tree_build::TreeBuilder, - tree_options::{OptionBool, TreeOptions}, - verb_store::PrefixSearchResult, - verbs::VerbExecutor, -}; /// An application state dedicated to displaying a tree. /// It's the first and main screen of broot. @@ -256,19 +257,32 @@ impl AppState for BrowserState { Action::RegexEdit(s, _) if !s.is_empty() => Status::new( task, self.normal_status_message(true), false ).display(w, screen), - Action::VerbEdit(invocation) => match con.verb_store.search(&invocation.name) { - PrefixSearchResult::NoMatch => Status::new( - task, mad_inline!("No matching verb (*?* for the list of verbs)"), true - ).display(w, screen), - PrefixSearchResult::Match(verb) => { - let line = self.displayed_tree().selected_line(); - verb.write_status(w, task, line.path.clone(), invocation, screen) + Action::VerbEdit(invocation) => { + if invocation.name.is_empty() { + Status::new( + task, + mad_inline!("Type a verb then *enter* to execute it (*?* for the list of verbs)"), + false, + ).display(w, screen) + } else { + match con.verb_store.search(&invocation.name) { + PrefixSearchResult::NoMatch => Status::new( + task, mad_inline!("No matching verb (*?* for the list of verbs)"), true + ).display(w, screen), + PrefixSearchResult::Match(verb) => { + let line = self.displayed_tree().selected_line(); + verb.write_status(w, task, line.path.clone(), invocation, screen) + } + PrefixSearchResult::TooManyMatches(completions) => Status::new( + task, + Composite::from_inline(&format!( + "Possible completions: {}", + completions.iter().map(|c| format!("*{}*", c)).collect::<Vec<String>>().join(", "), + )), + false, + ).display(w, screen) + } } - PrefixSearchResult::TooManyMatches => Status::new( - task, - mad_inline!("Type a verb then *enter* to execute it (*?* for the list of verbs)"), - false, - ).display(w, screen) } _ => Status::new(task, self.normal_status_message(false), false).display(w, screen), } |