diff --git a/README-CN.md b/README-CN.md index c035f02..02b6232 100644 --- a/README-CN.md +++ b/README-CN.md @@ -251,6 +251,7 @@ - 可通过 `psc menu symbol WriteSpaceTab ` 自定义此符号 - 所有补全都可以在输入部分字符后按下 `Tab` 键触发补全 + - 对于以 `=` 结尾的选项,如果有相关补全定义,则可以直接按下 `Tab` 键触发补全 ### 关于补全提示信息 diff --git a/README.md b/README.md index c1c2459..6611d64 100644 --- a/README.md +++ b/README.md @@ -244,6 +244,7 @@ - If there's also `»`, it means that there's some preset completions, you can press `Space` and `Tab` key to continue to get them without entering a string. - It can be customized by running `psc menu symbol WriteSpaceTab ` - All completions can be triggered by pressing the `Tab` key after entering a part. + - For options ending with `=`, if there's completion definition, you can directly press the `Tab` key to get the completions. ### About completion tip diff --git a/module/CHANGELOG-CN.md b/module/CHANGELOG-CN.md index e1cc128..baf6961 100644 --- a/module/CHANGELOG-CN.md +++ b/module/CHANGELOG-CN.md @@ -3,6 +3,12 @@ 简体中文

+## 5.3.1 (2025/1/5) + +- 修复了当选项补全已使用,在下次补全时没有被过滤掉的问题。 +- 支持以 `=` 结尾的选项直接获取后续补全项。 + - 需要相关补全定义。 + ## 5.3.0 (2025/1/1) - 优化了 json 补全文件的属性结构和解析。 diff --git a/module/CHANGELOG.json b/module/CHANGELOG.json index d356afc..f6a01c6 100644 --- a/module/CHANGELOG.json +++ b/module/CHANGELOG.json @@ -1,4 +1,21 @@ [ + { + "version": "5.3.1", + "info": { + "zh-CN": [ + "更新(2025/1/5)\n", + "- 修复了当选项补全已使用,在下次补全时没有被过滤掉的问题。\n", + "- 支持以 = 结尾的选项直接获取后续补全项。\n", + " - 需要相关补全定义。\n" + ], + "en-US": [ + "Update(2025/1/5)\n", + "- Fix an issue where when option completion had been used, it wasn't filtered out on the next completion.\n", + "- Support options ending with = to directly get next completion items.\n", + " - Requires completion definition.\n" + ] + } + }, { "version": "5.3.0", "info": { diff --git a/module/CHANGELOG.md b/module/CHANGELOG.md index 913f4cf..8031b09 100644 --- a/module/CHANGELOG.md +++ b/module/CHANGELOG.md @@ -3,6 +3,12 @@ English

+## 5.3.1 (2025/1/5) + +- Fix an issue where when option completion had been used, it wasn't filtered out on the next completion. +- Support options ending with `=` to directly get next completion items. + - Requires completion definition. + ## 5.3.0 (2025/1/1) - Optimize the property structure and parsing of json completion files. diff --git a/module/PSCompletions/PSCompletions.psd1 b/module/PSCompletions/PSCompletions.psd1 index c11e1be..c0a7a82 100644 --- a/module/PSCompletions/PSCompletions.psd1 +++ b/module/PSCompletions/PSCompletions.psd1 @@ -9,7 +9,7 @@ @{ RootModule = 'PSCompletions.psm1' - ModuleVersion = '5.3.0' + ModuleVersion = '5.3.1' GUID = '00929632-527d-4dab-a5b3-21197faccd05' diff --git a/module/PSCompletions/core/completion/win.ps1 b/module/PSCompletions/core/completion/win.ps1 index e1b1a7e..9770423 100644 --- a/module/PSCompletions/core/completion/win.ps1 +++ b/module/PSCompletions/core/completion/win.ps1 @@ -31,7 +31,7 @@ Add-Member -InputObject $PSCompletions -MemberType ScriptMethod generate_complet $filter_list = $PSCompletions.get_completion() $result = $PSCompletions.menu.show_module_menu($filter_list) if ($result -ne $null) { - if ($space_tab) { + if ($space_tab -or $PSCompletions.input_arr[-1] -like '-*=') { [Microsoft.PowerShell.PSConsoleReadLine]::Insert($result) } else { diff --git a/module/PSCompletions/core/init.ps1 b/module/PSCompletions/core/init.ps1 index 64a6fcb..c2a7193 100644 --- a/module/PSCompletions/core/init.ps1 +++ b/module/PSCompletions/core/init.ps1 @@ -1,7 +1,7 @@ using namespace System.Management.Automation $_ = Split-Path $PSScriptRoot -Parent New-Variable -Name PSCompletions -Value @{ - version = '5.3.0' + version = '5.3.1' path = @{ root = $_ completions = Join-Path $_ 'completions' @@ -305,7 +305,7 @@ Add-Member -InputObject $PSCompletions -MemberType ScriptMethod get_completion { # 1. 没有选项 # 2. 最后一个是选项 - if ($space_tab) { + if ($space_tab -or $PSCompletions.input_arr[-1] -like '-*=') { $filter_input_arr = [array](filterInput $input_arr) } else { @@ -437,7 +437,7 @@ Add-Member -InputObject $PSCompletions -MemberType ScriptMethod get_completion { $completions = $PSCompletions.completions_data.$root $filter_list = [array](filterCompletions) $filter_list = [array](handleCompletions $filter_list) - if ($space_tab) { + if ($space_tab -or $PSCompletions.input_arr[-1] -like '-*=') { $filter_list = $filter_list.Where({ $_.CompletionText -notlike "-*" -or $_.CompletionText -notin $input_arr }) } else { @@ -481,46 +481,42 @@ Add-Member -InputObject $PSCompletions -MemberType ScriptMethod get_completion { $filter_list = [array]$filter_list - $return = @() if ($space_tab) { - foreach ($item in $filter_list) { - if ($item -ne $null) { - $has_alias = $false - if ($item.alias) { - foreach ($a in $item.alias) { - if ($a -in $PSCompletions.input_arr) { - $has_alias = $true - break - } - } - } - if (!$has_alias) { - $padSymbols = foreach ($c in $item.symbols) { $PSCompletions.config.$c } - $padSymbols = if ($padSymbols) { "$($PSCompletions.config.between_item_and_symbol)$($padSymbols -join '')" }else { '' } - $return += @{ - ListItemText = $item.ListItemText + $padSymbols - CompletionText = $item.CompletionText - ToolTip = $item.ToolTip - } - } - } - } - return $return + $_input_arr = $PSCompletions.input_arr } else { - foreach ($item in $filter_list) { - if ($item -ne $null) { - $padSymbols = foreach ($c in $item.symbols) { $PSCompletions.config.$c } - $padSymbols = if ($padSymbols) { "$($PSCompletions.config.between_item_and_symbol)$($padSymbols -join '')" }else { '' } - $return += @{ - ListItemText = $item.ListItemText + $padSymbols - CompletionText = $item.CompletionText - ToolTip = $item.ToolTip + $_input_arr = [System.Collections.Generic.List[string]]$PSCompletions.input_arr.Clone() + $_input_arr.RemoveAt(($_input_arr.Count - 1)) + } + $return = @() + + foreach ($item in $filter_list) { + if ($item -ne $null) { + if ($item.CompletionText -in $_input_arr) { + continue + } + $isContinue = $false + if ($item.alias) { + foreach ($a in $item.alias) { + if ($a -in $_input_arr) { + $isContinue = $true + break + } } } + if ($isContinue) { + continue + } + $padSymbols = foreach ($c in $item.symbols) { $PSCompletions.config.$c } + $padSymbols = if ($padSymbols) { "$($PSCompletions.config.between_item_and_symbol)$($padSymbols -join '')" }else { '' } + $return += @{ + ListItemText = $item.ListItemText + $padSymbols + CompletionText = $item.CompletionText + ToolTip = $item.ToolTip + } } - return $return } + return $return } Add-Member -InputObject $PSCompletions -MemberType ScriptMethod handle_data_by_runspace { param( @@ -1125,14 +1121,25 @@ Add-Member -InputObject $PSCompletions.menu -MemberType ScriptMethod show_powers } $padSymbols = foreach ($c in $_.symbols) { $PSCompletions.config.$c } $padSymbols = if ($padSymbols) { "$($PSCompletions.config.between_item_and_symbol)$($padSymbols -join '')" }else { '' } - [CompletionResult]::new($_.CompletionText, ($_.ListItemText + $padSymbols), 'ParameterValue', $tip) + + if ($PSCompletions.input_arr[-1] -like "-*=") { + [CompletionResult]::new("$($PSCompletions.input_arr[-1])$($_.CompletionText)", ($_.ListItemText + $padSymbols), 'ParameterValue', $tip) + } + else { + [CompletionResult]::new($_.CompletionText, ($_.ListItemText + $padSymbols), 'ParameterValue', $tip) + } } } else { foreach ($_ in $filter_list) { $padSymbols = foreach ($c in $_.symbols) { $PSCompletions.config.$c } $padSymbols = if ($padSymbols) { "$($PSCompletions.config.between_item_and_symbol)$($padSymbols -join '')" }else { '' } - [CompletionResult]::new($_.CompletionText, ($_.ListItemText + $padSymbols), 'ParameterValue', ' ') + if ($PSCompletions.input_arr[-1] -like "-*=") { + [CompletionResult]::new("$($PSCompletions.input_arr[-1])$($_.CompletionText)", ($_.ListItemText + $padSymbols), 'ParameterValue', ' ') + } + else { + [CompletionResult]::new($_.CompletionText, ($_.ListItemText + $padSymbols), 'ParameterValue', ' ') + } } } } diff --git a/module/version.txt b/module/version.txt index 03f488b..c7cb131 100644 --- a/module/version.txt +++ b/module/version.txt @@ -1 +1 @@ -5.3.0 +5.3.1