From: "NARUSE, Yui" Date: 2010-09-14T00:10:09+09:00 Subject: [ruby-dev:42248] Re: 1.9.2 readline can't handle cursorkeys, mbcs chars etc (msvcrt) (2010/09/13 23:44), arton wrote: >> その3。 >> で、誰が拾うにしても、チケットとして登録すべきじゃないですかね。 >> ruby 1.9のbugチケットとしてメンテナにアサインした状態でチケッ >> トを登録することを推奨します。 > バグなんですかね? またバグとして、何のバグでしょうか? そこが元々迷って > チケットを切らなかった理由です。(Win32で使うのがバグというのは無しとして) > 1. Win32版のバグ …… カーソルキーなどを読み込んでいないのがバグ > 2. ext/readlineのバグ …… Win32のSTDIN.getbyteは特殊キーを無視する(仕 > 様?)のだから、libreadlineのgetcを呼び出すようにする(私のパッチはこの > 考え) > 3. 2でFAだとしても、GNU readline のWin32サポートは終了してしまったので、 > 代替ライブラリの利用などを考えたいところ(※)。その観点からは、1というこ > とにしたいなぁ。その場合、文字コードとしては読めない特殊キーをどう処理す > るのが良い? > ※)というか、特殊キーをreadline内部で複数文字に割り当てるため、その判断 > をext/readlineがしなければならない時点で、困った感が漂っています。おそら > く遅いマシンだとキー連続入力時に、libreadlineのgetcを呼ぶ方法だと > libreadlineが入力をペンディングしていることが外部からは判断できないので、 > 後続の文字を読めなくなるはずです。それを回避するには、スレッド切り替え器 > へ制御を移すこと自体がまずいということになって、それはものすごく嫌。 > > という感じです。 その中のどれを選んでも Ruby を直さないといけないのですから、 Ruby のバグ (または Feature Request) であることは明らかでしょう。 なお、STDIN.getbyte で特殊キーを考慮するのは無いかなという気がします。 win32.c か、ext/readline か、ext/io/console のどこかはともかく。 -- NARUSE, Yui