ListView does not render the first selection after reuse in Vi insert mode

Open
#5,178 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
3/5
Estimated time
1-2 days
Newbie friendliness
65/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Quiet
Tech stack
csharp
Domain
cli

Research direction

Reproduce with pwsh -noprofile, Vi edit mode, and ListView prediction settings, then compare the first DownArrow after reopening ListView with the initial use. Trace the ListView navigation path and Vi insert-mode handling. Done means the first press visibly highlights the internally selected item on every reuse, with Enter and subsequent navigation remaining consistent.

Written by the indexing model from the issue text.

Description

Needs-Triage :mag:
Prerequisites
  • Write a descriptive title.
  • Make sure you are able to repro it on the latest released version
  • Search the existing issues, especially the pinned issues.
Exception report
N/A
Screenshot

Long-time Vi mode user. For a couple of years, I've been dealing w/ an obscure behavior and finally taking time to report it.

Issue: In Vi insert mode with PredictionViewStyle set to ListView, the first DownArrow press after reusing the list selects a history item internally but fails to render its highlight until another navigation key is pressed.

More Detail:

When using these PSReadLine options:

Set-PSReadLineOption -PredictionViewStyle ListView
Set-PSReadLineOption -EditMode Vi

the first DownArrow press in the prediction selects a history entry internally without visually rendering the selection highlight.

Pressing Enter at that point executes/accepts the first history item, which indicates that the item was selected despite no visible highlight. Pressing DownArrow a second time causes the selection highlight to appear. After that, UpArrow and DownArrow behave and render normally.

Note: The issue does not occur the first time ListView is used in a new PowerShell session; it only begins after ListView has already been used once.

Entering Vi normal mode and then returning to insert mode resets the behavior, e.g. Esc + i. After that, the first DownArrow press renders correctly again, until the issue recurs.

Image
Environment data
PS Version: 7.6.3
PS HostName: ConsoleHost
PSReadLine Version: 2.4.5
PSReadLine EditMode: Vi
OS: 10.0.26100.1 (WinBuild.160101.0800)
BufferWidth: 180
BufferHeight: 50
Steps to reproduce
  1. Run pwsh -noprofile
  2. Run Set-PSReadLineOption -EditMode Vi
  3. Run Set-PSReadlineOption -PredictionViewStyle ListView
  4. In Vi insert mode, type text that produces history predictions
  5. Use the ListView and navigate it with DownArrow (on the first use in a new session, the highlight appears as expected)
  6. Complete or dismiss the ListView (e.g. ESC to dismiss and cc to clear the line/command)
  7. Trigger ListView again and press DownArrow once

On the second and later uses of ListView:

  • The first DownArrow press appears to do nothing visually.
  • No entry is highlighted.
  • Pressing Enter accepts or runs the first list item, indicating that the selection changed internally.
  • Pressing DownArrow a second time causes the visual highlight to appear.
  • Subsequent UpArrow and DownArrow presses render correctly.
Expected behavior
  • Each DownArrow press in ListView should visibly move the selection to the next prediction.
  • On the first press, the first matching history entry should be highlighted immediately.
  • The visible highlight and the internally selected item should always remain in sync.
  • This should behave consistently every time ListView is opened while in Vi insert mode.
Actual behavior
  • After ListView has been used once, reopening it in Vi insert mode produces no visible highlight on the first DownArrow press.
  • The first item appears unselected, but it is selected internally.
  • Pressing Enter accepts/runs that first item despite the missing highlight.
  • A second DownArrow press makes the highlight appear, after which navigation renders normally.
  • Pressing Esc and then i temporarily resets the behavior.
Dominant language
C#
Stars
4.4k
Forks
341
PR merge metrics
No merged PRs in 30d

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from PowerShell/PSReadLine

All issues in PowerShell/PSReadLine

Similar issues

More C# issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.