Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

not using the Legacy Psreadline experience leads to "custom key handler"-error #4196

Open
DEberhardt opened this issue Oct 2, 2022 · 17 comments
Assignees
Labels
Area-PSReadLine Bug: PowerShell 5.1 Bugs when using PowerShell 5.1. Issue-Bug A bug to squash.

Comments

@DEberhardt
Copy link

Type: Bug

Install PSReadline v2.2.6
Use VsCode
Use PowerShell or PowerShellPreview
Use PowerShell Extension terminal session that is opened to you

[2022-10-02 11:09:22]❯ get-moduleAn exception occurred in custom key handler, see $error for more information: Object reference not set to an instance of an object.

No command I enter (incl. $Error[0].Exception) leads anywhere.

If I then disable the live PSreadline experience (i.e. switch on the "legacy PSreadline experience" in the settings and restart the terminal session, it works fine.

Problem #1) - I can't close the terminal session as it de-facto disables the extensions
Problem #2) - I can't use it in legacy mode as most of the PsReadLine goodies do not work anymore
Problem #3) - I can't use it in normal operation mode

What can be done here?
Anything else I can do to troubleshoot this?

Extension version: 2022.9.2
VS Code version: Code 1.71.2 (74b1f979648cc44d385a2286793c226e611f59e7, 2022-09-14T21:03:37.738Z)
OS version: Windows_NT x64 10.0.22623
Modes:
Sandboxed: No

System Info
Item Value
CPUs Intel(R) Core(TM) i7-9700K CPU @ 3.60GHz (8 x 3600)
GPU Status 2d_canvas: enabled
canvas_oop_rasterization: disabled_off
direct_rendering_display_compositor: disabled_off_ok
gpu_compositing: enabled
multiple_raster_threads: enabled_on
opengl: enabled_on
rasterization: enabled
raw_draw: disabled_off_ok
skia_renderer: enabled_on
video_decode: enabled
video_encode: enabled
vulkan: disabled_off
webgl: enabled
webgl2: enabled
webgpu: disabled_off
Load (avg) undefined
Memory (System) 31.93GB (19.83GB free)
Process Argv --crash-reporter-id efc3d77d-4b9d-44d6-894f-bd5aee3260eb
Screen Reader no
VM 0%
A/B Experiments
vsliv368cf:30146710
vsreu685:30147344
python383cf:30185419
vspor879:30202332
vspor708:30202333
vspor363:30204092
vslsvsres303:30308271
pythonvspyl392:30443607
vserr242cf:30382550
pythontb:30283811
vsjup518:30340749
pythonptprofiler:30281270
vshan820:30294714
vstes263cf:30335440
vscorecescf:30445987
pythondataviewer:30285071
vscod805:30301674
binariesv615:30325510
bridge0708:30335490
bridge0723:30353136
cmake_vspar411:30557514
vsaa593:30376534
pythonvs932:30410667
cppdebug:30492333
vsclangdc:30486549
c4g48928:30535728
dsvsc012:30540252
azure-dev_surveyone:30548225
2144e591:30553903
i5d37513:30580093
pyindex848:30577860
fc301958:30573243

@ghost ghost added the Needs: Triage Maintainer attention needed! label Oct 2, 2022
@DEberhardt
Copy link
Author

PS: The normal PowerShell terminal works fine, it is this one here btw:
image

@DEberhardt
Copy link
Author

Don't know if this helps:

[Warn  - 10:48:12] OmniSharp.Extensions.LanguageServer.Server.LspServerOutputFilter: Tried to send request or notification before initialization was completed and will be sent later OutgoingNotification { Method = powerShell/extensionCommandAdded, Params = Microsoft.PowerShell.EditorServices.Extensions.ExtensionCommandAddedNotification, TraceParent = , TraceState =  } | @Request='OutgoingNotification { Method = powerShell/extensionCommandAdded, Params = Microsoft.PowerShell.EditorServices.Extensions.ExtensionCommandAddedNotification, TraceParent = , TraceState =  }'
[Warn  - 10:48:22] OmniSharp.Extensions.LanguageServer.Server.Configuration.DidChangeConfigurationProvider: No ConfigurationItems have been defined, configuration won't surface any configuration from the client! | 
[Warn  - 11:02:28] Microsoft.PowerShell.EditorServices.Handlers.PsesCodeActionHandler: textDocument/codeAction skipping diagnostic with empty Code field: PowerShell The string is missing the terminator: '. | 
[Warn  - 11:02:30] Microsoft.PowerShell.EditorServices.Handlers.PsesCodeActionHandler: textDocument/codeAction skipping diagnostic with empty Code field: PowerShell The string is missing the terminator: '. | 
[Error - 11:02:36] Microsoft.PowerShell.EditorServices.Services.PowerShell.Host.PsesInternalHost: An error occurred while running the REPL loop - System.ArgumentOutOfRangeException: The value must be greater than or equal to zero and less than the console's buffer size in that dimension.
Parameter name: top
Actual value was 23.
   at System.Console.SetCursorPosition(Int32 left, Int32 top)
   at Microsoft.PowerShell.EditorServices.Services.PowerShell.Console.LegacyReadLine.MoveCursorToIndex(Int32 promptStartCol, Int32 promptStartRow, Int32 consoleWidth, Int32 newCursorIndex)
   at Microsoft.PowerShell.EditorServices.Services.PowerShell.Console.LegacyReadLine.InsertInput(StringBuilder inputLine, Int32 promptStartCol, Int32 promptStartRow, String insertedInput, Int32 cursorIndex, Int32 insertIndex, Int32 replaceLength, Int32 finalCursorIndex)
   at Microsoft.PowerShell.EditorServices.Services.PowerShell.Console.LegacyReadLine.ReadLine(CancellationToken cancellationToken)
   at Microsoft.PowerShell.EditorServices.Services.PowerShell.Host.PsesInternalHost.InvokeReadLine(CancellationToken cancellationToken)
   at Microsoft.PowerShell.EditorServices.Services.PowerShell.Host.PsesInternalHost.DoOneRepl(CancellationToken cancellationToken) | 
[Error - 11:08:22] Connection to PowerShell Editor Services (the Extension Terminal) was closed. See below prompt to restart!

@andyleejordan
Copy link
Member

What custom key handler are you using? I don't expect the legacy readline to be a stable experience, it's just a fallback for debugging and is not covered in tests.

@andyleejordan andyleejordan added Needs: Author Feedback Please give us the requested feedback! and removed Needs: Triage Maintainer attention needed! labels Oct 3, 2022
@DEberhardt
Copy link
Author

I am at a loss, how would I find out? (I am not aware changing the key handler...)

@ghost ghost added Needs: Maintainer Attention Maintainer attention needed! and removed Needs: Author Feedback Please give us the requested feedback! labels Oct 4, 2022
@andyleejordan
Copy link
Member

Mm, try running Get-PSReadLineKeyHandler.

@DEberhardt
Copy link
Author

d'oh! Could have guessed this one... Thank you.

User defined functions
======================

Key   Function                Description
---   --------                -----------
Enter OhMyPoshEnterKeyHandler User defined action

Just updating to v12.0.1 to see whether this fixes things - This did appear after the most recent update to v11.x

@DEberhardt
Copy link
Author

DEberhardt commented Oct 7, 2022

ok. no change after update. Shall I report this to Jan as well? (I have no issues with this setup on Windows Terminal, just in VsCode for some reason and only in the terminal instance created by PowerShell Extension...

Edit: the Normal PowerShell Terminal that starts with VsCode works fine as well.

@andyleejordan
Copy link
Member

Let's try without OhMyPoshEnterKeyHandler and see if that's the problem! Can remove Posh from your profile setup?

@DEberhardt
Copy link
Author

Yes, this works - not calling this line restores functionality

oh-my-posh init pwsh --config $UserPsScripts\ParagnosterPlus2.omp.json | Invoke-Expression

@andyleejordan
Copy link
Member

Ok, seems like a bug with the oh-my-posh key handler, I would recommend reaching out to those developers to get it fixed!

@andyleejordan andyleejordan added Resolution-External Will close automatically. and removed Needs: Maintainer Attention Maintainer attention needed! labels Oct 10, 2022
@ghost ghost closed this as completed Oct 10, 2022
@ghost
Copy link

ghost commented Oct 10, 2022

This issue has been marked as external. It has been automatically closed for housekeeping purposes.

@andyleejordan andyleejordan added Issue-Bug A bug to squash. Area-PSReadLine Bug: PowerShell 5.1 Bugs when using PowerShell 5.1. and removed Resolution-External Will close automatically. labels Oct 10, 2022
@andyleejordan
Copy link
Member

Sorry, did not mean to allow the bot to close this, I'm actively investigating it. I was able to repro, though only with Windows PowerShell.

@andyleejordan andyleejordan reopened this Oct 10, 2022
@andyleejordan
Copy link
Member

@DEberhardt Please let me know when you get a change to try PowerShell 7 AKA PowerShell Core and if it repros there too. I can repro but only with PowerShell 5.1 AKA Windows PowerShell, and what happens is weird, I'm getting this exception:

Exception has occurred: CLR/System.ArgumentOutOfRangeException
Exception thrown: 'System.ArgumentOutOfRangeException' in mscorlib.dll: 'The value must be greater than or equal to zero and less than the console's buffer size in that dimension.'
   at System.Console.SetCursorPosition(Int32 left, Int32 top)

With this stacktrace:

mscorlib.dll!System.Console.SetCursorPosition(int left, int top) (Unknown Source:0)
Microsoft.PowerShell.PSReadLine2.dll!Microsoft.PowerShell.PSConsoleReadLine.InvokePrompt(System.ConsoleKeyInfo? key, object arg) (Unknown Source:0)
[Lightweight Function] (Unknown Source:0)
System.Management.Automation.dll!System.Management.Automation.Interpreter.DynamicInstruction<System.Type, object>.Run(System.Management.Automation.Interpreter.InterpretedFrame frame) (Unknown Source:0)
System.Management.Automation.dll!System.Management.Automation.Interpreter.EnterTryCatchFinallyInstruction.Run(System.Management.Automation.Interpreter.InterpretedFrame frame) (Unknown Source:0)
System.Management.Automation.dll!System.Management.Automation.Interpreter.EnterTryCatchFinallyInstruction.Run(System.Management.Automation.Interpreter.InterpretedFrame frame) (Unknown Source:0)
System.Management.Automation.dll!System.Management.Automation.Interpreter.EnterTryCatchFinallyInstruction.Run(System.Management.Automation.Interpreter.InterpretedFrame frame) (Unknown Source:0)
System.Management.Automation.dll!System.Management.Automation.Interpreter.EnterTryCatchFinallyInstruction.Run(System.Management.Automation.Interpreter.InterpretedFrame frame) (Unknown Source:0)
System.Management.Automation.dll!System.Management.Automation.Interpreter.EnterTryCatchFinallyInstruction.Run(System.Management.Automation.Interpreter.InterpretedFrame frame) (Unknown Source:0)
System.Management.Automation.dll!System.Management.Automation.Interpreter.Interpreter.Run(System.Management.Automation.Interpreter.InterpretedFrame frame) (Unknown Source:0)
System.Management.Automation.dll!System.Management.Automation.Interpreter.LightLambda.RunVoid1<System.Management.Automation.Language.FunctionContext>(System.Management.Automation.Language.FunctionContext arg0) (Unknown Source:0)
System.Management.Automation.dll!System.Management.Automation.ScriptBlock.InvokeWithPipeImpl(System.Management.Automation.ScriptBlockClauseToInvoke clauseToInvoke, bool createLocalScope, System.Collections.Generic.Dictionary<string, System.Management.Automation.ScriptBlock> functionsToDefine, System.Collections.Generic.List<System.Management.Automation.PSVariable> variablesToDefine, System.Management.Automation.ScriptBlock.ErrorHandlingBehavior errorHandlingBehavior, object dollarUnder, object input, object scriptThis, System.Management.Automation.Internal.Pipe outputPipe, System.Management.Automation.InvocationInfo invocationInfo, object[] args) (Unknown Source:0)
System.Management.Automation.dll!System.Management.Automation.ScriptBlock.InvokeWithPipe.AnonymousMethod__0() (Unknown Source:0)
System.Management.Automation.dll!System.Management.Automation.Runspaces.RunspaceBase.RunActionIfNoRunningPipelinesWithThreadCheck(System.Action action) (Unknown Source:0)
System.Management.Automation.dll!System.Management.Automation.ScriptBlock.InvokeWithPipe(bool useLocalScope, System.Management.Automation.ScriptBlock.ErrorHandlingBehavior errorHandlingBehavior, object dollarUnder, object input, object scriptThis, System.Management.Automation.Internal.Pipe outputPipe, System.Management.Automation.InvocationInfo invocationInfo, bool propagateAllExceptionsToTop, System.Collections.Generic.List<System.Management.Automation.PSVariable> variablesToDefine, System.Collections.Generic.Dictionary<string, System.Management.Automation.ScriptBlock> functionsToDefine, object[] args) (Unknown Source:0)
System.Management.Automation.dll!System.Management.Automation.ScriptBlock.DoInvoke(object dollarUnder, object input, object[] args) (Unknown Source:0)
Microsoft.PowerShell.PSReadLine2.dll!Microsoft.PowerShell.PSConsoleReadLine.SetKeyHandler.__HandlerWrapper|0(System.ConsoleKeyInfo? k, object arg) (Unknown Source:0)
Microsoft.PowerShell.PSReadLine2.dll!Microsoft.PowerShell.PSConsoleReadLine.ProcessOneKey.AnonymousMethod__0() (Unknown Source:0)
Microsoft.PowerShell.PSReadLine2.dll!Microsoft.PowerShell.PSConsoleReadLine.CallPossibleExternalApplication.AnonymousMethod__0() (Unknown Source:0)
Microsoft.PowerShell.PSReadLine2.dll!PlatformWindows.CallPossibleExternalApplication<System.__Canon>(System.Func<System.__Canon> func) (Unknown Source:0)
Microsoft.PowerShell.PSReadLine2.dll!Microsoft.PowerShell.PSConsoleReadLine.CallPossibleExternalApplication<object>(System.Func<object> func) (Unknown Source:0)
Microsoft.PowerShell.PSReadLine2.dll!Microsoft.PowerShell.PSConsoleReadLine.InputLoop() (Unknown Source:0)
Microsoft.PowerShell.PSReadLine2.dll!Microsoft.PowerShell.PSConsoleReadLine.ReadLine(System.Management.Automation.Runspaces.Runspace runspace, System.Management.Automation.EngineIntrinsics engineIntrinsics, System.Threading.CancellationToken cancellationToken, bool? lastRunStatus) (Unknown Source:0)
Microsoft.PowerShell.EditorServices.dll!Microsoft.PowerShell.EditorServices.Services.PowerShell.Console.PsrlReadLine.InvokePSReadLine(System.Threading.CancellationToken cancellationToken) Line 48 (c:\Users\andschwa\src\PowerShellEditorServices\src\PowerShellEditorServices\Services\PowerShell\Console\PsrlReadLine.cs:48)
...

@andyleejordan
Copy link
Member

andyleejordan commented Oct 10, 2022

@andyleejordan andyleejordan self-assigned this Oct 10, 2022
@andyleejordan
Copy link
Member

andyleejordan commented Oct 10, 2022

@DEberhardt Responding to JanDeDobbeleer/oh-my-posh#2910 (comment) here so we don't flood oh-my-posh.

Regarding your profile not loading with PowerShell 7, please note that PowerShell 5.1 and 7 load (some) different profile paths.

I would run $PROFILE | Get-Member -Type NoteProperty to see which paths are being loaded in each environment, and then try moving/copying your profile to one that loads in PowerShell 7 (in the VS Code host).

@DEberhardt
Copy link
Author

Don't mind me, I have forgotten how profiles work. 😄 - Having never used PowerShell Core in VsCode (still working with the AzureAd module 😐 ), I had never created a Profile for VsCode, only for the normal terminal.
All good on that front now.

With the Extension Terminal on PowerShell 7 Core (x64) I do not get an error

@andyleejordan
Copy link
Member

Ok cool, thanks for confirming this is just a PowerShell 5.1 issue.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Area-PSReadLine Bug: PowerShell 5.1 Bugs when using PowerShell 5.1. Issue-Bug A bug to squash.
Projects
None yet
Development

No branches or pull requests

2 participants