Description
We got a report in PowerShell repo about "arrow keys not functioning properly in PowerShell 7.2 with rxvt terminals", see PowerShell/PowerShell#16606.
It turns out Console.ReadKey behaves differently in .NET 6 comparing to .NET 5 when TERM is set to rxvt.
In .NET 5, the ConsoleKeyInfo returned for LeftArrow doesn't has any modifiers, as shown below:

However, in .NET 6, the the ConsoleKeyInfo returned for LeftArrow has Control and Shift modifiers specified, as shown below:

It's not like Console.ReadKey always work properly in .NET 5 with rxvt terminals, for example, Home returns Escape+H (it returns OH in .NET 6), and End returns Escape+F (it returns OF in .NET 6), instead of Home and End as expected.
But it's been reported that setting TERM=xterm would make Console.ReadKey work as expected with regard to arrow keys with rxvt terminals -- see PowerShell/PowerShell#16606 (comment).
So, are rxvt terminals really supported by .NET 5/6? If so, what configurations should be done to make it work properly with Console.ReadKey?
Reproduction Steps
- Run
export TERM=rxvt
- Start PowerShell 7.2.0 or 7.2.1
- Try using arrow keys to navigate the cursor position
Expected behavior
LeftArrow and RightArrow should move the cursor left and right;
LeftArrow and RightArrow should go through history commands.
Actual behavior
Arrow keys are not working as expected.
Home and End prints OH and OF respectively.
Regression?
Yes.
Known Workarounds
Setting TERM=xterm would make Console.ReadKey work as expected with rxvt terminals.
Configuration
No response
Other information
No response
Description
We got a report in PowerShell repo about "arrow keys not functioning properly in PowerShell 7.2 with
rxvtterminals", see PowerShell/PowerShell#16606.It turns out
Console.ReadKeybehaves differently in .NET 6 comparing to .NET 5 whenTERMis set torxvt.In .NET 5, the
ConsoleKeyInforeturned for LeftArrow doesn't has any modifiers, as shown below:However, in .NET 6, the the
ConsoleKeyInforeturned for LeftArrow hasControlandShiftmodifiers specified, as shown below:It's not like
Console.ReadKeyalways work properly in .NET 5 withrxvtterminals, for example, Home returnsEscape+H(it returnsOHin .NET 6), and End returnsEscape+F(it returnsOFin .NET 6), instead ofHomeandEndas expected.But it's been reported that setting
TERM=xtermwould makeConsole.ReadKeywork as expected with regard to arrow keys withrxvtterminals -- see PowerShell/PowerShell#16606 (comment).So, are
rxvtterminals really supported by .NET 5/6? If so, what configurations should be done to make it work properly withConsole.ReadKey?Reproduction Steps
export TERM=rxvtExpected behavior
LeftArrow and RightArrow should move the cursor left and right;
LeftArrow and RightArrow should go through history commands.
Actual behavior
Arrow keys are not working as expected.
Home and End prints
OHandOFrespectively.Regression?
Yes.
Known Workarounds
Setting
TERM=xtermwould makeConsole.ReadKeywork as expected withrxvtterminals.Configuration
No response
Other information
No response