Project

General

Profile

Actions

Bug #3827

closed

ext/readline can't handle cursor keys and cp932 chars

Added by arton (Akio Tajima) over 14 years ago. Updated over 13 years ago.

Status:
Closed
Target version:
ruby -v:
ruby 1.9.2p0 (2010-08-18 revision 29036) [i386-mswin32_100]
Backport:

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

readline.patch (1.44 KB) readline.patch arton (Akio Tajima), 09/14/2010 08:54 PM
Actions #1

Updated by naruse (Yui NARUSE) about 14 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 13 years ago

高尾さん

本件,いかがでしょうか.

Updated by kouji (Kouji Takao) over 13 years ago

Koichi Sasada wrote:

高尾さん

本件,いかがでしょうか.

こちらで試せるようなWin32環境がありません。一旦取り込みますので、試してみていただけないでしょうか。 > Akio Tajima さん

Updated by kouji (Kouji Takao) over 13 years ago

r32181にてパッチをコミットしました。お手数をおかけしますが、確認いただけますでしょうか。

Actions #5

Updated by nahi (Hiroshi Nakamura) over 13 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 13 years ago

artonさん、こちら、いかがでしょうか?

Updated by usa (Usaku NAKAMURA) over 13 years ago

ちょっと見てみました。

o カーソルキー -> 使えるようになった
o HomeおよびEndキー -> 使えるようになった
o マルチバイト文字 -> 入力できるようになった
x マルチバイト文字に対するバックスペース -> 1バイトだけ消しやがる

とりあえず、rubyとしては問題解決と言えると思います(最後の1個はreadlineのせいだと思いたい)。

Updated by kosaki (Motohiro KOSAKI) over 13 years ago

  • Status changed from Assigned to Closed

確認がとれたようなのでcloseします。また問題が起きたら別チケット作りましょう

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0