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

Unable to move cursor in ruby REPL pry or irb #2520

Closed
jburns24 opened this issue Aug 23, 2019 · 8 comments
Closed

Unable to move cursor in ruby REPL pry or irb #2520

jburns24 opened this issue Aug 23, 2019 · 8 comments
Labels
Area-TerminalControl Issues pertaining to the terminal control (input, selection, keybindings, mouse interaction, etc.) Area-VT Virtual Terminal sequence support Issue-Bug It either shouldn't be doing this or needs an investigation. Product-Terminal The new Windows Terminal. Resolution-Duplicate There's another issue on the tracker that's pretty much the same thing.
Milestone

Comments

@jburns24
Copy link

jburns24 commented Aug 23, 2019

Environment

Win32NT 10.0.18362.0 Microsoft Windows NT 10.0.18362.0

Windows Terminal Version: 0.3.2171.0

Other Software

ruby 2.6.3p62 (2019-04-16 revision 67580) [x64-mingw32]
gems
pry (0.12.2)
irb (1.0.0)
both ruby REPLs

Steps to reproduce

In windows terminal start the ruby REPL pry or irb

type fooar then press the left arrow key to move the cursor back.

Expected behavior

You should be able to use the arrow keys to move around.

Actual behavior

The cursor is stuck at the end of the line.

I tested this behavior in other REPLs such as node, and python and this was not an issue. I then tested this behavior in other shells cmd and powershell (not in windows terminal) and this behavior was not reproducible.

Did some further testing and noticed this issue is a problem both in powershell and command when I start them in windows terminal, but it is not an issue when I run wsl in windows terminal.

@ghost ghost added Needs-Triage It's a new issue that the core contributor team needs to triage at the next triage meeting Needs-Tag-Fix Doesn't match tag requirements labels Aug 23, 2019
@thomthom
Copy link

thomthom commented Aug 25, 2019

I'm seeing the same thing. When I use classic cmd then irb works fine. But when I have a cmd tab in Windows Terminal then I'm unable to use Backspace to erase characters in irb, unable to move the cursor and unable to use up/down arrow to navigate the irb history.

@jimfoltz
Copy link

jimfoltz commented Sep 1, 2019

@ramsay-vibes
Copy link

ramsay-vibes commented Sep 1, 2019

In mit-scheme REPL I have experienced the same (at least similar) issue, per the following screenshot where the following was typed: (cadr '1 '(2 3 4)) followed by left-arrow, right-arrow, up-arrow, down-arrow.

scheme

Unfortunately, the same issue occurs in the Ubuntu 18.04 LTS shell. So, not sure if this is a console issue or not.

Windows Version: [10.0.18362.295]
Terminal Version: [0.4.2382.0]

@zadjii-msft
Copy link
Member

This feels like it might be related to #2642

@zadjii-msft zadjii-msft added Area-TerminalControl Issues pertaining to the terminal control (input, selection, keybindings, mouse interaction, etc.) Area-VT Virtual Terminal sequence support Issue-Bug It either shouldn't be doing this or needs an investigation. Product-Terminal The new Windows Terminal. labels Sep 4, 2019
@ghost ghost removed the Needs-Tag-Fix Doesn't match tag requirements label Sep 4, 2019
@zadjii-msft zadjii-msft added this to the Terminal v1.0 milestone Sep 4, 2019
@DHowett-MSFT DHowett-MSFT removed the Needs-Triage It's a new issue that the core contributor team needs to triage at the next triage meeting label Sep 5, 2019
@DHowett-MSFT
Copy link
Contributor

It looks like other REPLs are susceptible to this as well. I wonder what common library they're using!

When fixed, validate:

  • R
  • irb
  • pry

@zanecodes
Copy link

zanecodes commented Jan 22, 2020

This appears to be related to rprichard/winpty#99, which suffers from the same problem, for what appears to be the same reason.

After digging into the rb-readline gem's source, I was able to confirm this by running the following code, once in PowerShell:

PS C:\Users\Zane> irb
irb(main):001:0> RbReadline.rl_read_key # following this, I press the left arrow key
=> "\xE0K"

and once in Windows Terminal Preview:

PS C:\Users\Zane> irb
irb(main):001:0> RbReadline.rl_read_key # following this, I press the left arrow key
=> "\x00K"

We can see that rb-readline only binds the arrow key handlers to the scancode sequences with the ENHANCED_KEY flag set ("\xE0" in hex, or "\340" in octal), so it simply doesn't handle these key sequences when they're missing the ENHANCED_KEY flag (as they seem to be when dispatched by winpty, or in this case, Windows Terminal Preview).

This could be considered a bug in rb-readline, but it doesn't seem to be under very active development, and since it also appears to be an issue in a number of other REPLs that do not use rb-readline, the solution for Windows Terminal Preview would seem to be to dispatch these key events with the ENHANCED_KEY flag set.

For those wanting to work around this in irb right now, you can do so by adding the following to your ~\.irbrc file:

# Workaround for https://github.com/microsoft/terminal/issues/2520
{
  "\000H" => :rl_get_previous_history, # Up
  "\000P" => :rl_get_next_history, # Down
  "\000M" => :rl_forward_char,  # Right
  "\000K" => :rl_backward_char, # Left
  "\000G" => :rl_beg_of_line,   # Home
  "\000O" => :rl_end_of_line,   # End
  "\000s" => :rl_backward_word, # Ctrl-Left
  "\000t" => :rl_forward_word, # Ctrl-Right
  "\000S" => :rl_delete, # Delete
  "\000R" => :rl_overwrite_mode # Insert
}.each do |keyseq, method|
  RbReadline.rl_bind_keyseq_if_unbound(keyseq, method)
end

@DHowett-MSFT
Copy link
Contributor

Ah! Thanks for looking into this. That makes this a /dupe of #2397.

@ghost
Copy link

ghost commented Jan 22, 2020

Hi! We've identified this issue as a duplicate of another one that already exists on this Issue Tracker. This specific instance is being closed in favor of tracking the concern over on the referenced thread. Thanks for your report!

@ghost ghost closed this as completed Jan 22, 2020
@ghost ghost added the Resolution-Duplicate There's another issue on the tracker that's pretty much the same thing. label Jan 22, 2020
cwboyd added a commit to cwboyd/dotfiles that referenced this issue Dec 2, 2020
This issue was closed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Area-TerminalControl Issues pertaining to the terminal control (input, selection, keybindings, mouse interaction, etc.) Area-VT Virtual Terminal sequence support Issue-Bug It either shouldn't be doing this or needs an investigation. Product-Terminal The new Windows Terminal. Resolution-Duplicate There's another issue on the tracker that's pretty much the same thing.
Projects
None yet
Development

No branches or pull requests

7 participants