feat: render default value if provided in right prompt

This commit is contained in:
Florent Vilmart 2025-03-21 07:57:11 -04:00
parent 4dca69fade
commit 471e4c6596
2 changed files with 13 additions and 9 deletions

View File

@ -4,8 +4,6 @@ use nu_engine::command_prelude::*;
use nu_protocol::shell_error::io::IoError; use nu_protocol::shell_error::io::IoError;
use reedline::{Reedline, Signal}; use reedline::{Reedline, Signal};
use std::io::Write;
#[derive(Clone)] #[derive(Clone)]
pub struct Input; pub struct Input;
@ -84,24 +82,29 @@ impl Command for Input {
return self.legacy_input(engine_state, stack, call, _input); return self.legacy_input(engine_state, stack, call, _input);
} }
// FIXME: print default val if present // Here we will render the default prompt to the right
let default_val: Option<String> = call.get_flag(engine_state, stack, "default")?; let default_val: Option<String> = call.get_flag(engine_state, stack, "default")?;
let right_prompt = match (&prompt_str, &default_val) {
(Some(_prompt), Some(val)) => format!("(default: {val})").to_string(),
_ => "".to_string(),
};
let mut buf = String::new(); let mut buf = String::new();
let prompt = ReedlinePrompt { let prompt = ReedlinePrompt {
left_prompt: prompt_str.unwrap_or("".to_string()), left_prompt: prompt_str.unwrap_or("".to_string()),
// Breaking change, the default is now in the right prompt
right_prompt,
indicator: "".to_string(), // TODO: Add support for custom prompt indicators indicator: "".to_string(), // TODO: Add support for custom prompt indicators
// for now, and backwards compat, we just use the empty // for now, and backwards compat, we just use the empty
// string // string
}; };
let mut line_editor = Reedline::create().with_ansi_colors(false); // Disable ansi colors for now let mut line_editor = Reedline::create();
// Disable ansi colors for now, for backwards compat. This will be configurable in the
// future
line_editor = line_editor.with_ansi_colors(false);
// TODO handle options // TODO handle options
loop { loop {
if i64::try_from(buf.len()).unwrap_or(0) >= numchar.item {
break;
}
match line_editor.read_line(&prompt) { match line_editor.read_line(&prompt) {
Ok(Signal::Success(buffer)) => { Ok(Signal::Success(buffer)) => {
buf.push_str(&buffer); buf.push_str(&buffer);

View File

@ -16,6 +16,7 @@ pub static DEFAULT_MULTILINE_INDICATOR: &str = "::: ";
pub struct ReedlinePrompt { pub struct ReedlinePrompt {
/// What segment should be rendered in the left (main) prompt /// What segment should be rendered in the left (main) prompt
pub left_prompt: String, pub left_prompt: String,
pub right_prompt: String,
pub indicator: String, pub indicator: String,
} }
@ -25,7 +26,7 @@ impl Prompt for ReedlinePrompt {
} }
fn render_prompt_right(&self) -> Cow<str> { fn render_prompt_right(&self) -> Cow<str> {
Cow::Borrowed("") Cow::Borrowed(&self.right_prompt)
} }
fn render_prompt_indicator(&self, edit_mode: PromptEditMode) -> Cow<str> { fn render_prompt_indicator(&self, edit_mode: PromptEditMode) -> Cow<str> {