aboutsummaryrefslogtreecommitdiff
path: root/mingling_core
diff options
context:
space:
mode:
Diffstat (limited to 'mingling_core')
-rw-r--r--mingling_core/src/program.rs14
-rw-r--r--mingling_core/tmpls/comps/pwsh.ps19
2 files changed, 22 insertions, 1 deletions
diff --git a/mingling_core/src/program.rs b/mingling_core/src/program.rs
index bee9772..7ea3a38 100644
--- a/mingling_core/src/program.rs
+++ b/mingling_core/src/program.rs
@@ -8,7 +8,7 @@ use crate::{
AnyOutput, ChainProcess, RenderResult, asset::dispatcher::Dispatcher,
error::ProgramExecuteError,
};
-use std::{env, fmt::Display, pin::Pin, sync::OnceLock};
+use std::{fmt::Display, pin::Pin, sync::OnceLock};
#[doc(hidden)]
pub mod exec;
@@ -74,7 +74,19 @@ where
Program {
collect: std::marker::PhantomData,
group: std::marker::PhantomData,
+ #[cfg(not(windows))]
args: env::args().collect(),
+ #[cfg(windows)]
+ args: {
+ std::env::args_os()
+ .map(|arg| {
+ use std::os::windows::ffi::OsStrExt;
+
+ let wide: Vec<u16> = arg.encode_wide().collect();
+ String::from_utf16_lossy(&wide)
+ })
+ .collect()
+ },
dispatcher: Vec::new(),
stdout_setting: Default::default(),
user_context: Default::default(),
diff --git a/mingling_core/tmpls/comps/pwsh.ps1 b/mingling_core/tmpls/comps/pwsh.ps1
index c9d9b97..eccb776 100644
--- a/mingling_core/tmpls/comps/pwsh.ps1
+++ b/mingling_core/tmpls/comps/pwsh.ps1
@@ -49,7 +49,16 @@ Register-ArgumentCompleter -Native -CommandName '<<<bin_name>>>' -ScriptBlock {
$args += ($element -replace '-', '^')
}
+ $originalEncoding = [Console]::OutputEncoding
+ $originalPSEncoding = $OutputEncoding
+ [Console]::OutputEncoding = [System.Text.Encoding]::UTF8
+ $OutputEncoding = [System.Text.Encoding]::UTF8
+
$output = & <<<bin_name>>> __comp $args 2>&1
+
+ [Console]::OutputEncoding = $originalEncoding
+ $OutputEncoding = $originalPSEncoding
+
$output = $output -replace "`r`n", "`n" -replace "`r", "`n"
if (-not $output) {