refactor(init): cleanup init stub (#2548)
* refactor(init): cleanup init stub * refactor(init): use iex PowerShell alias * fix(init): prevent bash scope pollution * refactor(init): update PowerShell snippet
This commit is contained in:
parent
2b0010ffe3
commit
c7d5ce72b5
106
src/init/mod.rs
106
src/init/mod.rs
|
@ -88,8 +88,8 @@ pub fn init_stub(shell_name: &str) -> io::Result<()> {
|
|||
|
||||
let starship = StarshipPath::init()?;
|
||||
|
||||
let setup_stub = match shell_basename {
|
||||
"bash" => {
|
||||
match shell_basename {
|
||||
"bash" => print!(
|
||||
/*
|
||||
* The standard bash bootstrap is:
|
||||
* `source <(starship init bash --print-full-init)`
|
||||
|
@ -121,68 +121,44 @@ pub fn init_stub(shell_name: &str) -> io::Result<()> {
|
|||
* https://github.com/starship/starship/pull/241
|
||||
* https://github.com/starship/starship/pull/278
|
||||
*/
|
||||
let script = {
|
||||
format!(
|
||||
r#"if [ "${{BASH_VERSINFO[0]}}" -gt 4 ] || ([ "${{BASH_VERSINFO[0]}}" -eq 4 ] && [ "${{BASH_VERSINFO[1]}}" -ge 1 ])
|
||||
then
|
||||
source <("{0}" init bash --print-full-init)
|
||||
else
|
||||
source /dev/stdin <<<"$("{0}" init bash --print-full-init)"
|
||||
fi"#,
|
||||
starship.sprint_posix()?
|
||||
)
|
||||
};
|
||||
r#"
|
||||
__main() {{
|
||||
local major="${{BASH_VERSINFO[0]}}"
|
||||
local minor="${{BASH_VERSINFO[1]}}"
|
||||
|
||||
Some(script)
|
||||
}
|
||||
"zsh" => {
|
||||
let script = format!(
|
||||
"source <(\"{}\" init zsh --print-full-init)",
|
||||
starship.sprint_posix()?
|
||||
);
|
||||
Some(script)
|
||||
}
|
||||
"fish" => {
|
||||
if ((major > 4)) || {{ ((major == 4)) && ((minor >= 1)); }}; then
|
||||
source <("{0}" init bash --print-full-init)
|
||||
else
|
||||
source /dev/stdin <<<"$("{0}" init bash --print-full-init)"
|
||||
fi
|
||||
}}
|
||||
__main
|
||||
unset -f __main
|
||||
"#,
|
||||
starship.sprint_posix()?
|
||||
),
|
||||
"zsh" => print!(
|
||||
r#"source <("{}" init zsh --print-full-init)"#,
|
||||
starship.sprint_posix()?
|
||||
),
|
||||
"fish" => print!(
|
||||
// Fish does process substitution with pipes and psub instead of bash syntax
|
||||
let script = format!(
|
||||
"source (\"{}\" init fish --print-full-init | psub)",
|
||||
starship.sprint_posix()?
|
||||
);
|
||||
Some(script)
|
||||
}
|
||||
"powershell" => {
|
||||
// Explanation of syntax:
|
||||
// &: Explicitly tells powershell to execute path with starship executable.
|
||||
//
|
||||
// @: multi-line stdout is returned as an array, but a single line or no lines
|
||||
// are returned as-is. @ ensures it's always an array.
|
||||
//
|
||||
// -join "`n": Joins the stdout array together as a string with newlines.
|
||||
// Powershell escapes with ` instead of \ thus `n translates to a newline.
|
||||
let script = format!(
|
||||
"Invoke-Expression (@(&\"{}\" init powershell --print-full-init) -join \"`n\")",
|
||||
starship.sprint()?
|
||||
);
|
||||
Some(script)
|
||||
}
|
||||
"ion" => {
|
||||
let script = format!("eval $({} init ion --print-full-init)", starship.sprint()?);
|
||||
Some(script)
|
||||
}
|
||||
"elvish" => {
|
||||
let script = format!(
|
||||
"eval (\"{}\" init elvish --print-full-init | slurp)",
|
||||
starship.sprint_posix()?
|
||||
);
|
||||
Some(script)
|
||||
}
|
||||
"tcsh" => {
|
||||
let script = format!(
|
||||
r#"eval "`("{}" init tcsh --print-full-init)`""#,
|
||||
starship.sprint_posix()?
|
||||
);
|
||||
Some(script)
|
||||
}
|
||||
r#"source ("{}" init fish --print-full-init | psub)"#,
|
||||
starship.sprint_posix()?
|
||||
),
|
||||
"powershell" => print!(
|
||||
r#"Invoke-Expression (& "{}" init powershell --print-full-init | Out-String)"#,
|
||||
starship.sprint()?
|
||||
),
|
||||
"ion" => print!("eval $({} init ion --print-full-init)", starship.sprint()?),
|
||||
"elvish" => print!(
|
||||
r#"eval ("{}" init elvish --print-full-init | slurp)"#,
|
||||
starship.sprint_posix()?
|
||||
),
|
||||
"tcsh" => print!(
|
||||
r#"eval `("{}" init tcsh --print-full-init)`"#,
|
||||
starship.sprint_posix()?
|
||||
),
|
||||
_ => {
|
||||
let quoted_arg = shell_words::quote(shell_basename);
|
||||
println!(
|
||||
|
@ -199,13 +175,9 @@ fi"#,
|
|||
Please open an issue in the starship repo if you would like to \
|
||||
see support for %s:\\nhttps://github.com/starship/starship/issues/new\\n\\n\" {0} {0}",
|
||||
quoted_arg
|
||||
);
|
||||
None
|
||||
)
|
||||
}
|
||||
};
|
||||
if let Some(script) = setup_stub {
|
||||
print!("{}", script);
|
||||
};
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue