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