@@ -122,34 +122,44 @@ function Show-Menu {
122122 $MenuHeight = 0
123123
124124 & $WriteMenu
125+ $NeedRendering = $false
126+
125127 While ($True ) {
126128 If (Test-KeyEscape $VKeyCode ) {
127129 Return $null
128130 }
129131
130- if (Test-KeyEnter $VKeyCode ) {
132+ If (Test-KeyEnter $VKeyCode ) {
131133 Break
132134 }
133135
134- # Read key when callback and available key, or no callback at all
135- $VKeyCode = $null
136- if ($null -eq $Callback -or [Console ]::KeyAvailable) {
137- $CurrentPress = Read-VKey
138- $VKeyCode = $CurrentPress.VirtualKeyCode
139- }
136+ # While there are
137+ Do {
138+ # Read key when callback and available key, or no callback at all
139+ $VKeyCode = $null
140+ if ($null -eq $Callback -or [Console ]::KeyAvailable) {
141+ $CurrentPress = Read-VKey
142+ $VKeyCode = $CurrentPress.VirtualKeyCode
143+ }
140144
141- If (Test-KeySpace $VKeyCode ) {
142- $CurrentSelection = Toggle- Selection $Position $CurrentSelection
143- }
145+ If (Test-KeySpace $VKeyCode ) {
146+ $CurrentSelection = Toggle- Selection $Position $CurrentSelection
147+ }
148+
149+ $Position = Get-PositionWithVKey - MenuItems $MenuItems - Position $Position - VKeyCode $VKeyCode
144150
145- $Position = Get-PositionWithVKey - MenuItems $MenuItems - Position $Position - VKeyCode $VKeyCode
151+ If (! $ (Test-KeyEscape $VKeyCode )) {
152+ [System.Console ]::SetCursorPosition(0 , [Math ]::Max(0 , [Console ]::CursorTop - $MenuHeight ))
153+ $NeedRendering = $true
154+ }
155+ } While ($null -eq $Callback -and [Console ]::KeyAvailable);
146156
147- If (! $ (Test-KeyEscape $VKeyCode )) {
148- [System.Console ]::SetCursorPosition(0 , [Math ]::Max(0 , [Console ]::CursorTop - $MenuHeight ))
157+ If ($NeedRendering ) {
149158 & $WriteMenu
159+ $NeedRendering = $false
150160 }
151161
152- if ($Callback ) {
162+ If ($Callback ) {
153163 & $Callback
154164
155165 Start-Sleep - Milliseconds 10
0 commit comments