mirror of
https://github.com/Llewellynvdm/starship.git
synced 2024-11-28 15:56:28 +00:00
fix(windows): fix windows terminal ANSI escape sequences (#2258)
* fix(windows): don't inherit stdin when executing commands On Windows, inheriting stdin from starship might lead to leaking the console reference to the command we're executing. `id.exe` supplied with Git has been observed to disable the ENABLE_VIRTUAL_TERMINAL_PROCESSING console flag if it inherits stdin -- leading to Windows Terminal not processing ANSI escape sequences. This change fixes #2254 by explicitly disabling stdin inheritance. The fix was suggested by David Knaack. * fix(username): don't call `id -u` on Windows This was done to check if user is root by comparing the UID to 0. Windows does not have a concept of UID 0 anyway, so it's pointless to call `id.exe` (which is installed with MSYS2 or Git, for example).
This commit is contained in:
parent
22dc8b842e
commit
c9c3455e23
@ -21,10 +21,14 @@ pub fn module<'a>(context: &'a Context) -> Option<Module<'a>> {
|
|||||||
let username = context.get_env(USERNAME_ENV_VAR)?;
|
let username = context.get_env(USERNAME_ENV_VAR)?;
|
||||||
let logname = context.get_env("LOGNAME");
|
let logname = context.get_env("LOGNAME");
|
||||||
|
|
||||||
|
let is_root = if cfg!(not(target_os = "windows")) {
|
||||||
let user_uid = get_uid();
|
let user_uid = get_uid();
|
||||||
|
user_uid == ROOT_UID
|
||||||
|
} else {
|
||||||
|
false
|
||||||
|
};
|
||||||
|
|
||||||
let is_not_login = logname.is_some() && username != logname.unwrap();
|
let is_not_login = logname.is_some() && username != logname.unwrap();
|
||||||
let is_root = user_uid == ROOT_UID;
|
|
||||||
|
|
||||||
let mut module = context.new_module("username");
|
let mut module = context.new_module("username");
|
||||||
let config: UsernameConfig = UsernameConfig::try_load(module.config);
|
let config: UsernameConfig = UsernameConfig::try_load(module.config);
|
||||||
|
@ -277,6 +277,7 @@ fn internal_exec_cmd(cmd: &str, args: &[&str]) -> Option<CommandOutput> {
|
|||||||
.args(args)
|
.args(args)
|
||||||
.stderr(Stdio::piped())
|
.stderr(Stdio::piped())
|
||||||
.stdout(Stdio::piped())
|
.stdout(Stdio::piped())
|
||||||
|
.stdin(Stdio::null())
|
||||||
.spawn()
|
.spawn()
|
||||||
{
|
{
|
||||||
Ok(process) => process,
|
Ok(process) => process,
|
||||||
|
Loading…
Reference in New Issue
Block a user