From 94358d1c9ef39e41a27d6bc24cae95cf7e45e8cc Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 26 Feb 2026 11:45:47 +0000 Subject: [PATCH 1/2] Initial plan From b4ce9a53d49bb4b8c86d6fd788e9010a0b391980 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 26 Feb 2026 11:51:17 +0000 Subject: [PATCH 2/2] Fix: auto-select exact match in Select prompt when multiple items share a common prefix Co-authored-by: shibayan <1356444+shibayan@users.noreply.github.com> --- Sharprompt.Tests/PaginatorTests.cs | 41 ++++++++++++++++++++++++++++++ Sharprompt/Internal/Paginator.cs | 13 ++++++++++ 2 files changed, 54 insertions(+) diff --git a/Sharprompt.Tests/PaginatorTests.cs b/Sharprompt.Tests/PaginatorTests.cs index 3d9b8c9..de733d9 100644 --- a/Sharprompt.Tests/PaginatorTests.cs +++ b/Sharprompt.Tests/PaginatorTests.cs @@ -87,4 +87,45 @@ public void SelectedItem_EmptyList() Assert.False(selected); } + + [Fact] + public void SelectedItem_ExactMatch() + { + var items = new[] { "Select", "SelectWithEnum", "MultiSelect", "MultiSelectWithEnum" }; + var paginator = new Paginator(items, items.Length, Optional.Empty, x => x); + + paginator.UpdateFilter("Select"); + + var selected = paginator.TryGetSelectedItem(out var selectedItem); + + Assert.True(selected); + Assert.Equal("Select", selectedItem); + } + + [Fact] + public void SelectedItem_ExactMatch_CaseInsensitive() + { + var items = new[] { "Select", "SelectWithEnum", "MultiSelect", "MultiSelectWithEnum" }; + var paginator = new Paginator(items, items.Length, Optional.Empty, x => x); + + paginator.UpdateFilter("select"); + + var selected = paginator.TryGetSelectedItem(out var selectedItem); + + Assert.True(selected); + Assert.Equal("Select", selectedItem); + } + + [Fact] + public void SelectedItem_NoExactMatch() + { + var items = new[] { "Select", "SelectWithEnum", "MultiSelect", "MultiSelectWithEnum" }; + var paginator = new Paginator(items, items.Length, Optional.Empty, x => x); + + paginator.UpdateFilter("Sel"); + + var selected = paginator.TryGetSelectedItem(out _); + + Assert.False(selected); + } } diff --git a/Sharprompt/Internal/Paginator.cs b/Sharprompt/Internal/Paginator.cs index d94e7c2..2c8f424 100644 --- a/Sharprompt/Internal/Paginator.cs +++ b/Sharprompt/Internal/Paginator.cs @@ -49,6 +49,19 @@ public bool TryGetSelectedItem([NotNullWhen(true)] out T? selectedItem) if (_selectedIndex == -1 || _filteredItems.Length == 0) { + if (!string.IsNullOrEmpty(FilterKeyword)) + { + foreach (var item in _filteredItems) + { + if (_textSelector(item).Equals(FilterKeyword, StringComparison.OrdinalIgnoreCase)) + { + selectedItem = item; + + return true; + } + } + } + selectedItem = default; return false;