irbの長い文字列入力時、backspace等でのバグ対処法

やっと見つかった!
先日もこれがわからなくて、どうすればいいんだろうと書きましたが・・・

こちらのURL
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/43546
勝手に引用させていただきます

篠原と申します。

コマンドプロンプトの桁数を80以外に変更していないでしょうか。
最近Windows環境のrubyをいじっていないので推測ですが、
どの配布でもreadlineライブラリは含まれているはずですから、
基本的には桁数が80であればちゃんと操作できると思います。

80桁以外にしたい場合はちょっと工夫が必要と思います。というのも、
readlineライブラリのソースを読んだところ、Win32環境で画面サイズを
取得するコードはrl_prep_terminalに書かれているのですが、ruby側からは
呼ばれていないようでした。これを明示的に呼んでやれば、80桁以外
でも操作できるようになりました。

ということで、具体的には以下のようなコードで対処していました。

require 'readline.so'

module Readline
  alias :readline_so :readline
  def readline(*a)
    unless @@rl_prep_called ||= false
      require 'dl'
      DL.dlopen('readline.dll')['rl_prep_terminal', '0I'][1]
      @@rl_prep_called = true
    end
    readline_so(*a)
  end
  module_function :readline_so, :readline
end

これを、インストールパスの site_ruby/1.8/readline.rb として保存しておくと
以後、require 'readline' されたときに rl_prep_terminal が1回だけ呼ばれます。
irb とか debug とか、iar(active recordのirbフロントエンド)とかで有効でした。
ruby-1.8.4時代の話ですが、ご参考まで。


07/05/18 に 山崎雄介<y-yamasaki / saeilo.co.jp> さんは書きました:
> 山崎(ゆ)です。
>
> Windowsのコマンドプロンプトでirbに76バイト以上の文字列を入力すると、バッ
> クスペースやカーソル移動の操作がまともにできなくなってしまいますが、これ
> を修正する方法はあるのでしょうか?
>
> One-Click Ruby Installer 1.8.6.25 を入れています。


と、上記を参考に、
私のインストール先だと
C:\Ruby\lib\ruby\site_ruby\1.8
に、「readline.rb」を上記コード(UTF-8 BOMなし)で保存して、

irbrcファイルで、
require 'readline'
を追加したら怪しい挙動が直った感じがします。

長年の疑問解決したかも!?
いやーーありがたい、勝手に参考にさせていただきましたが、
篠原様、そしてメーリングリストに質問を投げていらっしゃった山崎様ありがとうございます!

引用まずそうだったらURLだけ載せて引用部分は削除致します。
ご本人達がここを見る事はないかもしれませんが・・・。