Bug #3827

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

Added by Akio Tajima over 3 years ago. Updated almost 3 years ago.

Status:Closed
Priority:Normal
Assignee:Akio Tajima
Category:ext
Target version:1.9.3
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のrlgetcを呼び出すようにしたものです。この中で入力の有無を判断してwaiteventsを呼び出すようにしています。
=end

readline.patch Magnifier (1.44 KB) Akio Tajima, 09/14/2010 08:54 PM

Associated revisions

Revision 32181
Added by Kouji Takao almost 3 years ago

  • ext/readline/readline.c (readline_getc): applied a patch in #3827 by by Akio Tajima . (see #3827)

History

#1 Updated by Yui NARUSE over 3 years ago

  • Category set to ext
  • Status changed from Open to Assigned
  • Assignee set to Kouji Takao

=begin

=end

#2 Updated by Koichi Sasada almost 3 years ago

高尾さん

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

#3 Updated by Kouji Takao almost 3 years ago

Koichi Sasada wrote:

高尾さん

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

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

#4 Updated by Kouji Takao almost 3 years ago

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

#5 Updated by Hiroshi Nakamura almost 3 years ago

  • Assignee changed from Kouji Takao to Akio Tajima
  • Target version set to 1.9.3

#6 Updated by Motohiro KOSAKI almost 3 years ago

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

#7 Updated by Usaku NAKAMURA almost 3 years ago

ちょっと見てみました。

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

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

#8 Updated by Motohiro KOSAKI almost 3 years ago

  • Status changed from Assigned to Closed

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

Also available in: Atom PDF