aboutsummaryrefslogtreecommitdiff
path: root/mingling_core/tmpls/comps/pwsh.ps1
diff options
context:
space:
mode:
Diffstat (limited to 'mingling_core/tmpls/comps/pwsh.ps1')
-rw-r--r--mingling_core/tmpls/comps/pwsh.ps143
1 files changed, 43 insertions, 0 deletions
diff --git a/mingling_core/tmpls/comps/pwsh.ps1 b/mingling_core/tmpls/comps/pwsh.ps1
new file mode 100644
index 0000000..6d7d91d
--- /dev/null
+++ b/mingling_core/tmpls/comps/pwsh.ps1
@@ -0,0 +1,43 @@
+Register-ArgumentCompleter -CommandName <<<bin_name>>> -ScriptBlock {
+ param($wordToComplete, $commandAst, $cursorPosition)
+
+ $line = $commandAst.ToString()
+ $commandName = if ($commandAst.CommandElements.Count -gt 0) {
+ $commandAst.CommandElements[0].Value
+ } else { "" }
+
+ $words = @()
+ $currentIndex = 0
+ $parser = [System.Management.Automation.PSParser]
+ $tokens = $parser::Tokenize($line, [ref]$null)
+
+ foreach ($token in $tokens) {
+ if ($token.Type -in 'CommandArgument', 'CommandParameter') {
+ $words += $token.Content
+ }
+ }
+
+ $args = @(
+ "-f", ($line -replace '-', '^')
+ "-C", $cursorPosition.ToString()
+ "-w", ($wordToComplete -replace '-', '^')
+ "-p", (if ($words.Count -gt 1) { $words[-2] } else { "" }) -replace '-', '^'
+ "-c", $commandName
+ "-i", ($words.Count - 1).ToString()
+ "-a", ($words | ForEach-Object { $_ -replace '-', '^' })
+ "-F", "powershell"
+ )
+
+ $suggestions = <<<bin_name>>> __comp $args 2>$null
+
+ if ($suggestions) {
+ $suggestions | ForEach-Object {
+ if ($_ -eq "_file_") {
+ $completionType = 'ProviderItem'
+ } else {
+ $completionType = 'ParameterValue'
+ }
+ [System.Management.Automation.CompletionResult]::new($_, $_, $completionType, $_)
+ }
+ }
+}