Issue #7859 has been reported by davidbalbert (David Albert).

----------------------------------------
Bug #7859: Readline: Incorrect arrow key behavior in vi_editing_mode insert mode with Readline 6.2
https://bugs.ruby-lang.org/issues/7859

Author: davidbalbert (David Albert)
Status: Open
Priority: Normal
Assignee: 
Category: 
Target version: 
ruby -v: 2.0.0-rc2


I've discovered what I think is a bug in the Readline module in the standard library. When I am using vi_editing_mode in insert mode (rather than command mode), I am unable to use the up arrow to go up through history. It seems that I can only go up through history when in command mode. Additionally, pressing the down arrow while in insert mode changes to command mode, which seems odd.

Perhaps this is intended behavior for the Readline module, but if it is, I would propose changing it. I would expect the up and down arrows to scroll up and down through history in both command mode and insert mode when Readline.vi_editing_mode? is true. You can find examples of the expected behavior in bash (`set -o vi` to get into vi mode), the Python REPL, and all other that I can remember using.

I've reproduced this with Readline 6.2 on Mac OS X 10.8.2 and Ubuntu precise64 with kernel version 3.2.0-37. It is worth noting that on Mac OS X with the EditLine wrapper, the Readline module works correctly although you must have the proper settings in your .editrc file because Readline.vi_editing_mode is not implemented.

Here is the code I used to test:

<pre>
<code class="ruby">
# readlinetest.rb
require 'readline'

trap(:INT) {
  exit 0
}

Readline.vi_editing_mode
puts "Readline::VERSION => #{Readline::VERSION}"

loop do
  puts Readline.readline(">> ", true)
end
</code>
</pre>

Example usage:

<pre>
<code>
$ ruby readlinetest.rb 
Readline::VERSION => 6.2
>> 1234
1234
>> 
</code>
</pre>

At this point, I would expect that the up arrow would put 1234 after the prompt, but instead nothing happens. Pressing the down arrow is the same as pressing escape and changes readline into command mode.

Let me know if there's anything else I can provide to help fix this. I tried jumping into the Readline module myself, but I'm not particularly familiar with how readline works and wasn't able to make much headway.


-- 
http://bugs.ruby-lang.org/