From: Takao Kouji Date: 2008-07-13T21:33:38+09:00 Subject: [ruby-dev:35464] Re: リリース前ToDoリスト 高尾宏治です。 On 2008/07/05, at 0:38, Yukihiro Matsumoto wrote: > |> [ruby-core:17479] [Ruby 1.8 - Bug #212] Issues with Readline in Mac OS X > | > |これはMac OS Xのreadlineというかlibeditがいろいろとおかしいだけ > |ではないでしょうか。 > > そうだとは思うのですが、OSXを知る人からの情報がないので断定 > できません。まあ、libreadlineで動いてるんだから、libeditは知 > らんというのも一つの態度でしょうが。 上記について、できる範囲で調査してみました。 GNU Readline の history_base と libedit の history_base の扱いが異なるようです。 GNU Readline の history_base は、 libedit の history_base - 1 のようです。 = GNU Readlineの場合 HIST_ENTRY *entry; add_history("1"); add_history("2"); add_history("3"); entry = history_get(history_base); printf("%s\n", entry->line); /* => 1 */ entry = history_get(history_base + 1); printf("%s\n", entry->line); /* => 2 */ entry = history_get(history_base + 2); printf("%s\n", entry->line); /* => 2 */ = libeditの場合 HIST_ENTRY *entry; add_history("1"); add_history("2"); add_history("3"); entry = history_get(history_base - 1); printf("%s\n", entry->line); /* => 1 */ entry = history_get(history_base); printf("%s\n", entry->line); /* => 2 */ entry = history_get(history_base + 1); printf("%s\n", entry->line); /* => 3 */ = パッチ これを踏まえて、作成したパッチをITSのチケットに添付しました。 動作を確認する手順や私の環境もチケットに記述しています。 http://redmine.ruby-lang.org/issues/show/212 念のため、パッチの動作を確認する手順を以下に書きます。 Mac OSX 10.5(leopard) を用意する。 このパッチを適用する。 configure の --enable-libedit を指定する。 make、make install する。 以下を実行する。 $ ruby -rreadline -e 'puts Readline::VERSION; Readline::HISTORY.push("1", "2", "3"); Readline::HISTORY.each { |i| puts i }' また、私の環境を以下に書きます。 * Mac OSX: 10.5.3 * ruby: ruby_1_8 branch(revision:18037, 2008-07-12 16:02:47 +0900 (Sat, 12 Jul 2008)) * libedit: $NetBSD: readline.h,v 1.18 2006/08/21 12:45:30 christos Exp $ = 備考 過去のreadlineに関するメールから、NetBSDでもlibeditを使用していると認識しています。 よろしければ、NetBSDでもパッチを適用して動作をご確認いただけないでしょうか。 Mac OSX 10.5.3でしか動作を確認していないため、パッチを適用することで、 他の環境では想定通りに動かないかもしれません。 以上です。 よろしくお願いいたします。