Project

General

Profile

Actions

Feature #1095

closed

Readline.completion_proc = nil を許可する。

Added by kouji (Kouji Takao) over 13 years ago. Updated about 11 years ago.

Status:
Closed
Priority:
Normal
Target version:
[ruby-dev:37880]

Description

=begin
高尾宏治です。

Readline.readlineの補完候補を取得する Proc を Readline.completion_proc= で指定できます。
しかし、補完候補を取得する処理をデフォルトのものに戻す方法がありません。
Readline.completion_proc に nil をセットできればデフォルトの挙動になるので、
それを許可しようと思います。以下のような記述ができるようになります。

begin
Readline.completion_proc = Proc.new { |s|
...
}
s = Readline.readline
ensure
Readline.completion_proc = nil
end

現在は、Readline.completion_proc= メソッドの中で、
引き数で指定されたオブジェクトが call メソッドをもっているかどうかチェックしているので、

Readline.completion_proc = nil

で ArgumentError 例外が発生します。
nilの場合は特別扱いして、completion_proc に代入できるようにしようと思います。
いかがでしょうか。

Index: readline.c

--- readline.c (revision 21997)
+++ readline.c (working copy)
@@ -304,6 +304,8 @@

  • should take input-string, and return an array of completion
  • candidates.
    • Set default if +proc+ is nil.
    • Raises ArgumentError exception if +proc+ does not respond to call method.
    • Raises SecurityError exception if $SAFE is 4.
      @@ -312,7 +314,7 @@
      readline_s_set_completion_proc(VALUE self, VALUE proc)
      {
      rb_secure(4);
  • if (!rb_respond_to(proc, rb_intern("call")))
  • if (!NIL_P(proc) && !rb_respond_to(proc, rb_intern("call")))
    rb_raise(rb_eArgError, "argument must respond to `call'");
    return rb_ivar_set(mReadline, completion_proc, proc);
    }
    =end
Actions #1

Updated by kouji (Kouji Takao) over 13 years ago

  • Category set to ext
  • Assignee set to kouji (Kouji Takao)
  • Target version set to 2.0.0

=begin

=end

Actions #2

Updated by matz (Yukihiro Matsumoto) over 13 years ago

=begin
まつもと ゆきひろです

In message "Re: [ruby-dev:37880] [FEATURE:trunk] Readline.completion_proc = nil を許可する。"
on Tue, 3 Feb 2009 14:57:10 +0900, Takao Kouji writes:

|Readline.readlineの補完候補を取得する Proc を Readline.completion_proc= で指定できます。
|しかし、補完候補を取得する処理をデフォルトのものに戻す方法がありません。
|Readline.completion_proc に nil をセットできればデフォルトの挙動になるので、
|それを許可しようと思います。以下のような記述ができるようになります。

|いかがでしょうか。

いいんじゃないでしょうか。

=end

Actions #3

Updated by kouji (Kouji Takao) over 13 years ago

  • Status changed from Open to Closed
  • % Done changed from 0 to 100

=begin
Applied in changeset r22012.
=end

Actions

Also available in: Atom PDF