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:
parent
0f76d46d95
commit
aceda0052f
28
src/init.rs
28
src/init.rs
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue