[#44925] [Backport93 - Backport #5702][Open] backport r33935 — Yusuke Endoh <mame@...>

19 messages 2011/12/03

[#44940] Re: [ruby-cvs:41134] naruse:r33956 (trunk): Comment out tests which fails with GDBM-DBM compat mode. — Tanaka Akira <akr@...>

2011/12/6 <naruse@ruby-lang.org>:

9 messages 2011/12/05
[#44941] Re: [ruby-cvs:41134] naruse:r33956 (trunk): Comment out tests which fails with GDBM-DBM compat mode. — KOSAKI Motohiro <kosaki.motohiro@...> 2011/12/05

2011年12月5日16:56 Tanaka Akira <akr@fsij.org>:

[#44942] Re: [ruby-cvs:41134] naruse:r33956 (trunk): Comment out tests which fails with GDBM-DBM compat mode. — KOSAKI Motohiro <kosaki.motohiro@...> 2011/12/05

> おかしいな。gdbmは勝手にcreateフラグを立ててしまうので当該2つの

[#44985] [ruby-trunk - Bug #5757][Open] main threadがreadやselectで待っていると、^C でなかなか死なない — Yui NARUSE <naruse@...>

12 messages 2011/12/13

[#45021] [ruby-trunk - Bug #5786][Open] LoadError: cannot load such file -- openssl — Kazuhiro NISHIYAMA <redmine@...>

11 messages 2011/12/21

[#45057] [ruby-trunk - Feature #5820][Assigned] Merge Onigmo to Ruby 2.0 — Yui NARUSE <naruse@...>

21 messages 2011/12/28

[ruby-dev:45015] Re: Readline.completion_append_character

From: Nobuyoshi Nakada <nobu@...>
Date: 2011-12-21 08:06:48 UTC
List: ruby-dev #45015
なかだです。

(11/04/30 14:40), Nobuhiro IMAI wrote:
> 影響範囲がよく分かっていませんが、Ruby の readline 側で
> rl_completion_append_character 相当のものを保持しておいて、補完する時
> にセットしてやればいいのではないでしょうか?
> 
> やってみたら何か動いてそう、というレベルのものですが、参考までにパッチ
> を付けてみます。Ruby のスクリプトから readline.so を使う限りはこれでよ
> さそうですが、拡張ライブラリから直接 rl_completion_append_character を
> いじるようなことがある(のかどうかは分かってません)と破綻しちゃいそうです。

もうちょっとシンプルに、readline()呼び出し前に保存しておいて補完すると
きにはそれを使うというのはどうでしょうか。readline()呼び出しの最中に他
のスレッドから変更しても上書きされてしまいますが、元々マルチスレッドで
動かせるものでもないと思います。


diff --git a/ext/readline/readline.c b/ext/readline/readline.c
index 198f0e6..e1c8316 100644
--- a/ext/readline/readline.c
+++ b/ext/readline/readline.c
@@ -70,6 +70,9 @@ static ID id_orig_prompt, id_last_prompt;
 
 static int (*history_get_offset_func)(int);
 static int (*history_replace_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);
@@ -258,6 +261,9 @@ insert_ignore_escape(VALUE self, VALUE prompt)
 static VALUE
 readline_get(VALUE prompt)
 {
+#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
+    readline_completion_append_character = rl_completion_append_character;
+#endif
     return (VALUE)readline((char *)prompt);
 }
 
@@ -642,6 +648,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


-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦

In This Thread