diff --git a/src/main.rs b/src/main.rs index 4437d5fc5..0ccece42f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,6 +1,10 @@ use std::{cell::RefCell, io::Write, rc::Rc}; -use dialoguer::{theme::ColorfulTheme, Select}; +use dialoguer::{ + console::{Style, Term}, + theme::ColorfulTheme, + Select, +}; use miette::{IntoDiagnostic, Result}; use nu_cli::{report_error, NuCompleter, NuHighlighter, NuValidator, NushellPrompt}; use nu_command::create_default_context; @@ -45,21 +49,27 @@ impl CompletionActionHandler for FuzzyCompletion { let _ = crossterm::terminal::disable_raw_mode(); println!(); - let result = Select::with_theme(&ColorfulTheme::default()) + let theme = ColorfulTheme { + active_item_style: Style::new().for_stderr().on_green().black(), + ..Default::default() + }; + let result = Select::with_theme(&theme) .default(0) .items(&selections[..]) - .interact() + .interact_on_opt(&Term::stdout()) .unwrap(); let _ = crossterm::terminal::enable_raw_mode(); - let span = completions[result].0; + if let Some(result) = result { + let span = completions[result].0; - let mut offset = present_buffer.offset(); - offset += completions[result].1.len() - (span.end - span.start); + let mut offset = present_buffer.offset(); + offset += completions[result].1.len() - (span.end - span.start); - // TODO improve the support for multiline replace - present_buffer.replace(span.start..span.end, &completions[result].1); - present_buffer.set_insertion_point(offset); + // TODO improve the support for multiline replace + present_buffer.replace(span.start..span.end, &completions[result].1); + present_buffer.set_insertion_point(offset); + } } } }