diff options
Diffstat (limited to 'src/modes/edit/completion.rs')
-rw-r--r-- | src/modes/edit/completion.rs | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/modes/edit/completion.rs b/src/modes/edit/completion.rs index bd4dd58..bcce187 100644 --- a/src/modes/edit/completion.rs +++ b/src/modes/edit/completion.rs @@ -4,7 +4,9 @@ use std::fs::{self, ReadDir}; use anyhow::Result; use strum::IntoEnumIterator; +use crate::common::{is_program_in_path, ZOXIDE}; use crate::event::ActionMap; +use crate::io::execute_and_capture_output_with_path; use crate::modes::Leave; /// Different kind of completions @@ -146,6 +148,7 @@ impl Completion { fn cd_update_from_input(&mut self, input_string: &str, current_path: &str) { self.proposals = vec![]; + self.cd_update_from_zoxide(input_string, current_path); if let Some(expanded_input) = self.expand_input(input_string) { self.proposals.push(expanded_input); } @@ -154,6 +157,21 @@ impl Completion { } } + fn cd_update_from_zoxide(&mut self, input_string: &str, current_path: &str) { + if !is_program_in_path(ZOXIDE) { + return; + } + let mut args = vec!["query"]; + args.extend(input_string.split(' ')); + let Ok(zoxide_output) = execute_and_capture_output_with_path(ZOXIDE, current_path, &args) + else { + return; + }; + if !zoxide_output.is_empty() { + self.proposals.push(zoxide_output.trim().to_string()); + } + } + fn expand_input(&mut self, input_string: &str) -> Option<String> { let expanded_input = shellexpand::tilde(input_string).into_owned(); if std::path::PathBuf::from(&expanded_input).exists() { |