summaryrefslogtreecommitdiffstats
path: root/src/print.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/print.rs')
-rw-r--r--src/print.rs37
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);
+ }
}