fix: handle path to shell in starship init (#106)

Add support for paths to init function

This adds support for qualified paths (e.g. using
`/usr/local/bin/zsh` instead of `zsh`) to init.rs.

The function now converts the shell name into an
OsStr, then to a Path, then gets the file stem,
and unwraps back into a str. While this process can
fail (yielding a None), it's highly unlikely to unless
the user has messed with their shells or there's an
issue in Starship--therefore, the failure message in
this case simply asks the user to file a bug report.
This commit is contained in:
Kevin Song 2019-07-20 10:45:41 -07:00 committed by Matan Kushner
parent 0f76d46d95
commit aceda0052f
1 changed files with 23 additions and 5 deletions

View File

@ -1,25 +1,43 @@
use std::ffi::OsStr;
use std::path::Path;
pub fn init(shell_name: &str) { pub fn init(shell_name: &str) {
log::debug!("Shell name: {}", shell_name); log::debug!("Shell name: {}", shell_name);
let setup_script = match shell_name {
"bash" => { let shell_basename = Path::new(shell_name).file_stem().and_then(OsStr::to_str);
let setup_script = match shell_basename {
Some("bash") => {
let script = "PS1=\"$(starship prompt --status=$?)\""; let script = "PS1=\"$(starship prompt --status=$?)\"";
Some(script) Some(script)
} }
"zsh" => { Some("zsh") => {
let script = "PROMPT=\"$(starship prompt --status=$?)\""; let script = "PROMPT=\"$(starship prompt --status=$?)\"";
Some(script) Some(script)
} }
"fish" => { Some("fish") => {
let script = "function fish_prompt; starship prompt --status=$status; end"; let script = "function fish_prompt; starship prompt --status=$status; end";
Some(script) Some(script)
} }
None => {
println!(
"Invalid shell name provided: {}\\n\
If this issue persists, please open an \
issue in the starship repo: \\n\
https://github.com/starship/starship/issues/new\\n\"",
shell_name
);
None
}
_ => { _ => {
/* Calling unwrap() here is fine because the None case will have
already matched on the previous arm */
println!( println!(
"printf \"\\n{0} is not yet supported by starship.\\n\ "printf \"\\n{0} is not yet supported by starship.\\n\
For the time being, we support bash, zsh, and fish.\\n\ For the time being, we support bash, zsh, and fish.\\n\
Please open an issue in the starship repo if you would like to \ Please open an issue in the starship repo if you would like to \
see support for {0}:\\nhttps://github.com/starship/starship/issues/new\"\\n\\n", see support for {0}:\\nhttps://github.com/starship/starship/issues/new\"\\n\\n",
shell_name shell_basename.unwrap()
); );
None None
} }