1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* ext/readline/readline.c: Add examples for Readline.completion_proc=.

[Ruby 1.9 - Bug #5057]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@32612 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
drbrain 2011-07-22 04:52:22 +00:00
parent af01784150
commit c1fa17c138
2 changed files with 67 additions and 6 deletions

View file

@ -1,3 +1,8 @@
Fri Jul 22 13:51:29 2011 Eric Hodel <drbrain@segment7.net>
* ext/readline/readline.c: Add examples for Readline.completion_proc=.
[Ruby 1.9 - Bug #5057]
Fri Jul 22 13:03:12 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
* ext/openssl/ossl_hmac.c: Revert checking return type of

View file

@ -454,15 +454,71 @@ readline_s_set_output(VALUE self, VALUE output)
* call-seq:
* Readline.completion_proc = proc
*
* Specifies a Proc object +proc+ to determine completion behavior. It
* should take input-string, and return an array of completion
* candidates.
* Specifies a Proc object +proc+ to determine completion behavior. It
* should take input string and return an array of completion candidates.
*
* Set default if +proc+ is nil.
* The default completion is used if +proc+ is nil.
*
* Raises ArgumentError exception if +proc+ does not respond to call method.
* The String that is passed to the Proc depends on the
* Readline.completer_word_break_characters property. By default the word
* under the cursor is passed to the Proc. For example, if the input is "foo
* bar" then only "bar" would be passed to the completion Proc.
*
* Raises SecurityError exception if $SAFE is 4.
* Upon successful completion the Readline.completion_append_character will be
* appended to the input so the user can start working on their next argument.
*
* = Examples
*
* == Completion for a Static List
*
* require 'readline'
*
* LIST = [
* 'search', 'download', 'open',
* 'help', 'history', 'quit',
* 'url', 'next', 'clear',
* 'prev', 'past'
* ].sort
*
* comp = proc { |s| LIST.grep(/^#{Regexp.escape(s)}/) }
*
* Readline.completion_append_character = " "
* Readline.completion_proc = comp
*
* while line = Readline.readline('> ', true)
* p line
* end
*
* == Completion For Directory Contents
*
* require 'readline'
*
* Readline.completion_append_character = " "
* Readline.completion_proc = Proc.new do |str|
* Dir[str+'*'].grep(/^#{Regexp.escape(str)}/)
* end
*
* while line = Readline.readline('> ', true)
* p line
* end
*
* = Autocomplete strategies
*
* When working with auto-complete there are some strategies that work well.
* To get some ideas you can take a look at the
* completion.rb[http://svn.ruby-lang.org/repos/ruby/trunk/lib/irb/completion.rb]
* file for irb.
*
* The common strategy is to take a list of possible completions and filter it
* down to those completions that start with the user input. In the above
* examples Enumerator.grep is used. The input is escaped to prevent Regexp
* special characters from interfering with the matching.
*
* It may also be helpful to use the Abbrev library to generate completions.
*
* Raises ArgumentError if +proc+ does not respond to the call method.
*
* Raises SecurityError if $SAFE is 4.
*/
static VALUE
readline_s_set_completion_proc(VALUE self, VALUE proc)