[#43378] trouble on "requrie 'tk'" — Hidetoshi NAGAI <nagai@...>
永井@知能.九工大です.
5 messages
2011/04/02
[#43382] Re: [ruby-cvs:38408] Ruby:r31228 (trunk): Fri Apr 1 18:53:06 2011 NAKAMURA, Hiroshi <nahi@ruby-lang.org> — "Martin J. Dürst" <duerst@...>
RFC2965 とか 'Netscape spec' より、
4 messages
2011/04/04
[#43403] Re: [ruby-cvs:38408] Ruby:r31228 (trunk): Fri Apr 1 18:53:06 2011 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
— Hiroshi Nakamura <nakahiro@...>
2011/04/20
T24gTW9uLCBBcHIgNCwgMjAxMSBhdCAxMDozOCwgIk1hcnRpbiBKLiBEw7xyc3QiIDxkdWVyc3RA
[#43384] [Ruby 1.9 - Bug #4562][Open] [pull requested] ./config no-ssl2で作ったopensslとext/opensslが混ざらない — Shyouhei Urabe <redmine@...>
7 messages
2011/04/07
[#43392] StringIO#{readlines(0), each_line(0)}が無限ループする — Watson <watson1978@...>
メールのタイトル通りなのですが、
8 messages
2011/04/08
[#43393] Re: StringIO#{readlines(0), each_line(0)}が無限ループする
— "Shota Fukumori (sora_h)" <sorah@...>
2011/04/09
r31252 で修正しました。
[#43394] Re: StringIO#{readlines(0), each_line(0)}が無限ループする
— Nobuhiro IMAI <nov@...>
2011/04/09
いまいです。
[#43406] [Ruby 1.9 - Bug #4591][Open] (1.5...2).max #=> 1 (Range#max) — redmine@...
10 messages
2011/04/20
[#43407] Re: [Ruby 1.9 - Bug #4591][Open] (1.5...2).max #=> 1 (Range#max)
— KOSAKI Motohiro <kosaki.motohiro@...>
2011/04/20
>
[#43412] [Ruby 1.9 - Feature #4592][Open] Tempfileを直接保存したい — Takeyuki Fujioka <xibbar@...>
15 messages
2011/04/21
[#45477] [ruby-trunk - Feature #4592] Tempfileを直接保存したい
— "mame (Yusuke Endoh)" <mame@...>
2012/03/31
[#45487] [ruby-trunk - Feature #4592] Tempfileを直接保存したい
— "mame (Yusuke Endoh)" <mame@...>
2012/04/02
[#43426] [Ruby 1.9 - Feature #4602][Open] naming ruby dll (win32/64) — Akio Tajima <artonx@...>
11 messages
2011/04/23
[#43427] [Ruby 1.9 - Feature #4605][Open] Random#randとKernel#randでRangeを扱えるように — Yuya Yaguchi <yayugu@...>
7 messages
2011/04/24
[#43437] Re: [ruby-cvs:38520] Ruby:r31340 (trunk): * random.c (random_s_rand, Init_Random): Random.rand should behave as — Urabe Shyouhei <shyouhei@...>
卜部です
6 messages
2011/04/25
[#43453] ThreadGroup の強化案 — Hidetoshi NAGAI <nagai@...>
永井@知能.九工大です.
14 messages
2011/04/28
[#43901] ThreadGroup#make_local_space! (Re: ThreadGroup の強化案)
— Hidetoshi NAGAI <nagai@...>
2011/06/25
永井@知能.九工大です.少々長いメールで失礼します.
[#43920] Re: ThreadGroup#make_local_space! (Re: ThreadGroup の強化案)
— Urabe Shyouhei <shyouhei@...>
2011/06/26
ひっじょうに根本的な質問をするのですけれども、ThreadGroupって何に使うん
[#43978] Re: ThreadGroup#make_local_space!
— Hidetoshi NAGAI <nagai@...>
2011/06/28
永井@知能.九工大です.
[#43979] Re: ThreadGroup#make_local_space!
— KOSAKI Motohiro <kosaki.motohiro@...>
2011/06/28
(2011/06/28 15:15), Hidetoshi NAGAI wrote:
[#43456] Readline.completion_append_character — Nobuhiro IMAI <nov@...>
いまいです。
6 messages
2011/04/29
[#43458] Re: Readline.completion_append_character
— Takao Kouji <kouji@...7.net>
2011/04/30
=1B$B9bHx$G$9!#=1B(B
[ruby-dev:43459] Re: Readline.completion_append_character
From:
Nobuhiro IMAI <nov@...>
Date:
2011-04-30 05:40:07 UTC
List:
ruby-dev #43459
いまいです。 From: Takao Kouji <kouji_at_takao7.net> Date: Sat, 30 Apr 2011 13:35:51 +0900 > 高尾です。 > >> GNU readline library での話ですが、6 系のものを使うと TAB キーでの補完 >> 後に Readline.completion_append_character がデフォルトの " " に戻ってし >> まいます。しかも、" " 以外にセットしても、補完された単語にはデフォルト >> の " " が付加されます。 > (省略) >> changelog に以下のように書いてあって、補完後にリセットされるのは意図的 >> なようです。Ruby の readline 側で何とかならないものでしょうか? > > 上記に関して確認させてください。 > > Readlineについて、いまいさんから2つの相談があったと認識しています。 はい。 > 1)GNU Readline 6の場合にReadline.completion_append_characterにnilを指定できない不具合がある > > nilをセットしても補完後にスペースが追加される問題ですね。 > こちらは原因を調査して対応したほうがよいと考えています。 そうですね。セットできないというか、セットしても効果が得られないと言う 感じです。nil に限らず、何をセットしても一度補完してしまうとデフォル ト値にリセットされてしまいます。 > 2)GNU Readline 6の場合でも5以前と同様の動作にしてほしい > > GNU Readline 6では、補完後にReadline.completion_append_characterがデ > フォルト値へリセットされるので、5以前と同様にリセットされないように > してほしいことで間違いないでしょうか。こちらについては、私はGNU > Readlineでそのような挙動なのであればそれに従ったほうがよいと思ってい > ます。GNU Readline本体では、何かしらの理由があってその方がよいと考え > て修正したのではないでしょうか。その恩恵を受けられる方がよいのではな > いでしょうか。それが問題であればGNU Readline本体を修正してもらう方が > よいと思います。 推測ですが、changelog を読む限り、GNU readline を利用するアプリケーショ ン側で rl_completion_append_character を変更すると、ライブラリ側で何か 問題が生じるので、補完する度にリセットするようになったのだと認識してい ます。必要に応じて、補完する関数(rl_attempted_completion_function か な?)を呼び出す度にアプリケーション側で rl_completion_append_character をセットしてね、ということなんじゃないでしょうか。 影響範囲がよく分かっていませんが、Ruby の readline 側で rl_completion_append_character 相当のものを保持しておいて、補完する時 にセットしてやればいいのではないでしょうか? やってみたら何か動いてそう、というレベルのものですが、参考までにパッチ を付けてみます。Ruby のスクリプトから readline.so を使う限りはこれでよ さそうですが、拡張ライブラリから直接 rl_completion_append_character を いじるようなことがある(のかどうかは分かってません)と破綻しちゃいそうです。 -- Nobuhiro IMAI <nov@yo.rim.or.jp> Key fingerprint = E57F 2482 4074 13BC 3B9A 165B C689 5B16 A620 4657
Attachments (1)
readline_completion_append_character.patch
(2.11 KB, text/x-diff)
diff --git a/ext/readline/readline.c b/ext/readline/readline.c
index a313271..05bba2a 100644
--- a/ext/readline/readline.c
+++ b/ext/readline/readline.c
@@ -69,6 +69,9 @@ static ID id_orig_prompt, id_last_prompt;
#endif
static int (*history_get_offset_func)(int);
+#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
+static int readline_completion_append_character;
+#endif
static char **readline_attempted_completion_function(const char *text,
int start, int end);
@@ -561,6 +564,9 @@ readline_attempted_completion_function(const char *text, int start, int end)
proc = rb_attr_get(mReadline, completion_proc);
if (NIL_P(proc))
return NULL;
+#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
+ rl_completion_append_character = readline_completion_append_character;
+#endif
#ifdef HAVE_RL_ATTEMPTED_COMPLETION_OVER
rl_attempted_completion_over = 1;
#endif
@@ -800,14 +806,14 @@ readline_s_set_completion_append_character(VALUE self, VALUE str)
{
rb_secure(4);
if (NIL_P(str)) {
- rl_completion_append_character = '\0';
+ readline_completion_append_character = '\0';
}
else {
OutputStringValue(str);
if (RSTRING_LEN(str) == 0) {
- rl_completion_append_character = '\0';
+ readline_completion_append_character = '\0';
} else {
- rl_completion_append_character = RSTRING_PTR(str)[0];
+ readline_completion_append_character = RSTRING_PTR(str)[0];
}
}
return self;
@@ -834,10 +840,10 @@ readline_s_get_completion_append_character(VALUE self)
char buf[1];
rb_secure(4);
- if (rl_completion_append_character == '\0')
+ if (readline_completion_append_character == '\0')
return Qnil;
- buf[0] = (char) rl_completion_append_character;
+ buf[0] = (char) readline_completion_append_character;
return rb_locale_str_new(buf, 1);
}
#else
@@ -1568,6 +1574,9 @@ Init_readline()
#ifdef HAVE_RL_CLEAR_SIGNALS
rl_clear_signals();
#endif
+#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
+ readline_completion_append_character = rl_completion_append_character;
+#endif
readline_s_set_input(mReadline, rb_stdin);
}