Bug #3827
closedext/readline can't handle cursor keys and cp932 chars
Description
=begin
Ruby-1.9.2-p0のext/readlineと、GNU libreadline-4.3.2 (http://jarp.does.notwork.org/win32/)の組み合わせでカーソルキー、Home/Endキーなどの特殊キーの入力ができません。また、2バイトコードのうちMSBがオフのコードのみが通ります。例)「表」であれば2バイト目の「\」のみが通る。)
原因は、複合的です。
・1.9.2のext/readlineはIO.getbyteを呼び出していますが、win32の1.9.2の実装ではカーソルキーなどの特殊キーを読めません。そのため無視されています。
・MBCSが符号拡張されてlibreadlineに渡されているので、無視されています。
添付のパッチは、win32の場合は、IO.getbyteではなくlibreadlineのrl_getcを呼び出すようにしたものです。この中で入力の有無を判断してwait_eventsを呼び出すようにしています。
=end
Files
        
           Updated by naruse (Yui NARUSE) about 15 years ago
          Updated by naruse (Yui NARUSE) about 15 years ago
          
          
        
        
      
      - Category set to ext
- Status changed from Open to Assigned
- Assignee set to kouji (Kouji Takao)
=begin
=end
        
           Updated by ko1 (Koichi Sasada) over 14 years ago
          Updated by ko1 (Koichi Sasada) over 14 years ago
          
          
        
        
      
      高尾さん
本件,いかがでしょうか.
        
           Updated by kouji (Kouji Takao) over 14 years ago
          Updated by kouji (Kouji Takao) over 14 years ago
          
          
        
        
      
      Koichi Sasada wrote:
高尾さん
本件,いかがでしょうか.
こちらで試せるようなWin32環境がありません。一旦取り込みますので、試してみていただけないでしょうか。 > Akio Tajima さん
        
           Updated by kouji (Kouji Takao) over 14 years ago
          Updated by kouji (Kouji Takao) over 14 years ago
          
          
        
        
      
      r32181にてパッチをコミットしました。お手数をおかけしますが、確認いただけますでしょうか。
        
           Updated by nahi (Hiroshi Nakamura) over 14 years ago
          Updated by nahi (Hiroshi Nakamura) over 14 years ago
          
          
        
        
      
      - Assignee changed from kouji (Kouji Takao) to arton (Akio Tajima)
- Target version set to 1.9.3
        
           Updated by kosaki (Motohiro KOSAKI) over 14 years ago
          Updated by kosaki (Motohiro KOSAKI) over 14 years ago
          
          
        
        
      
      artonさん、こちら、いかがでしょうか?
        
           Updated by usa (Usaku NAKAMURA) over 14 years ago
          Updated by usa (Usaku NAKAMURA) over 14 years ago
          
          
        
        
      
      ちょっと見てみました。
o カーソルキー -> 使えるようになった
o HomeおよびEndキー -> 使えるようになった
o マルチバイト文字 -> 入力できるようになった
x マルチバイト文字に対するバックスペース -> 1バイトだけ消しやがる
とりあえず、rubyとしては問題解決と言えると思います(最後の1個はreadlineのせいだと思いたい)。
        
           Updated by kosaki (Motohiro KOSAKI) over 14 years ago
          Updated by kosaki (Motohiro KOSAKI) over 14 years ago
          
          
        
        
      
      - Status changed from Assigned to Closed
確認がとれたようなのでcloseします。また問題が起きたら別チケット作りましょう