From 4d1ce6c27b980cc484e77a7169265283a73b911b Mon Sep 17 00:00:00 2001 From: JT <547158+jntrnr@users.noreply.github.com> Date: Wed, 5 Jan 2022 06:49:04 +1100 Subject: [PATCH] Use default prompt as fallback (#663) --- crates/nu-cli/src/prompt.rs | 19 +++++++++++++------ src/main.rs | 10 +++++----- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/crates/nu-cli/src/prompt.rs b/crates/nu-cli/src/prompt.rs index 2315c494f..0c7e3ada8 100644 --- a/crates/nu-cli/src/prompt.rs +++ b/crates/nu-cli/src/prompt.rs @@ -1,3 +1,5 @@ +use reedline::DefaultPrompt; + use { reedline::{ Prompt, PromptEditMode, PromptHistorySearch, PromptHistorySearchStatus, PromptViMode, @@ -8,7 +10,7 @@ use { /// Nushell prompt definition #[derive(Clone)] pub struct NushellPrompt { - prompt_string: String, + prompt_string: Option, default_prompt_indicator: String, default_vi_insert_prompt_indicator: String, default_vi_visual_prompt_indicator: String, @@ -24,7 +26,7 @@ impl Default for NushellPrompt { impl NushellPrompt { pub fn new() -> NushellPrompt { NushellPrompt { - prompt_string: "".to_string(), + prompt_string: None, default_prompt_indicator: "〉".to_string(), default_vi_insert_prompt_indicator: ": ".to_string(), default_vi_visual_prompt_indicator: "v ".to_string(), @@ -32,7 +34,7 @@ impl NushellPrompt { } } - pub fn update_prompt(&mut self, prompt_string: String) { + pub fn update_prompt(&mut self, prompt_string: Option) { self.prompt_string = prompt_string; } @@ -54,7 +56,7 @@ impl NushellPrompt { pub fn update_all_prompt_strings( &mut self, - prompt_string: String, + prompt_string: Option, prompt_indicator_string: String, prompt_vi_insert_string: String, prompt_vi_visual_string: String, @@ -73,8 +75,13 @@ impl NushellPrompt { } impl Prompt for NushellPrompt { - fn render_prompt(&self, _: usize) -> Cow { - self.prompt_string.as_str().into() + fn render_prompt(&self, width: usize) -> Cow { + if let Some(prompt_string) = &self.prompt_string { + prompt_string.into() + } else { + let default = DefaultPrompt::new(1); + default.render_prompt(width).to_string().into() + } } fn render_prompt_indicator(&self, edit_mode: PromptEditMode) -> Cow { diff --git a/src/main.rs b/src/main.rs index 193284f36..99c5d3135 100644 --- a/src/main.rs +++ b/src/main.rs @@ -763,7 +763,7 @@ fn update_prompt<'prompt>( Err(_) => { // apply the other indicators nu_prompt.update_all_prompt_strings( - String::new(), + None, prompt_indicator_string, prompt_vi_insert_string, prompt_vi_visual_string, @@ -775,7 +775,7 @@ fn update_prompt<'prompt>( None => { // apply the other indicators nu_prompt.update_all_prompt_strings( - String::new(), + None, prompt_indicator_string, prompt_vi_insert_string, prompt_vi_visual_string, @@ -803,7 +803,7 @@ fn update_prompt<'prompt>( // If we can't run the custom prompt, give them the default // apply the other indicators nu_prompt.update_all_prompt_strings( - String::new(), + None, prompt_indicator_string, prompt_vi_insert_string, prompt_vi_visual_string, @@ -816,7 +816,7 @@ fn update_prompt<'prompt>( match evaluated_prompt { Ok(evaluated_prompt) => { nu_prompt.update_all_prompt_strings( - evaluated_prompt, + Some(evaluated_prompt), prompt_indicator_string, prompt_vi_insert_string, prompt_vi_visual_string, @@ -824,7 +824,7 @@ fn update_prompt<'prompt>( ); } _ => nu_prompt.update_all_prompt_strings( - String::new(), + None, prompt_indicator_string, prompt_vi_insert_string, prompt_vi_visual_string,