diff options
Diffstat (limited to 'src/print.rs')
-rw-r--r-- | src/print.rs | 37 |
1 files changed, 31 insertions, 6 deletions
diff --git a/src/print.rs b/src/print.rs index 11d834128..b7db0a10b 100644 --- a/src/print.rs +++ b/src/print.rs @@ -114,7 +114,8 @@ pub fn get_prompt(context: Context) -> String { ); let module_strings = root_module.ansi_strings_for_shell(context.shell, Some(context.width)); - if config.add_newline { + if config.add_newline && !context.continuation { + // continuation prompts normally do not include newlines, but they can writeln!(buf).unwrap(); } write!(buf, "{}", ANSIStrings(&module_strings)).unwrap(); @@ -416,19 +417,27 @@ fn load_formatter_and_modules<'a>(context: &'a Context) -> (StringFormatter<'a>, let lformatter = StringFormatter::new(&config.format); let rformatter = StringFormatter::new(&config.right_format); + let cformatter = StringFormatter::new(&config.continuation_prompt); if lformatter.is_err() { log::error!("Error parsing `format`") } if rformatter.is_err() { log::error!("Error parsing `right_format`") } + if cformatter.is_err() { + log::error!("Error parsing `continuation_prompt`") + } - match (lformatter, rformatter) { - (Ok(lf), Ok(rf)) => { + match (lformatter, rformatter, cformatter) { + (Ok(lf), Ok(rf), Ok(cf)) => { let mut modules: BTreeSet<String> = BTreeSet::new(); - modules.extend(lf.get_variables()); - modules.extend(rf.get_variables()); - if context.right { + if !context.continuation { + modules.extend(lf.get_variables()); + modules.extend(rf.get_variables()); + } + if context.continuation { + (cf, modules) + } else if context.right { (rf, modules) } else { (lf, modules) @@ -461,4 +470,20 @@ mod test { let actual = get_prompt(context); assert_eq!(expected, actual); } + + #[test] + fn continuation_prompt() { + let mut context = default_context(); + context.config = StarshipConfig { + config: Some(toml::toml! { + continuation_prompt="><>" + }), + }; + context.root_config.continuation_prompt = "><>".to_string(); + context.continuation = true; + + let expected = String::from("><>"); + let actual = get_prompt(context); + assert_eq!(expected, actual); + } } |