[前][次][番号順一覧][スレッド一覧]

ruby-changes:20564

From: drbrain <ko1@a...>
Date: Fri, 22 Jul 2011 13:52:30 +0900 (JST)
Subject: [ruby-changes:20564] drbrain:r32612 (trunk): * ext/readline/readline.c: Add examples for Readline.completion_proc=.

drbrain	2011-07-22 13:52:22 +0900 (Fri, 22 Jul 2011)

  New Revision: 32612

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=32612

  Log:
    * ext/readline/readline.c:  Add examples for Readline.completion_proc=.
      [Ruby 1.9 - Bug #5057]

  Modified files:
    trunk/ChangeLog
    trunk/ext/readline/readline.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 32611)
+++ ChangeLog	(revision 32612)
@@ -1,3 +1,8 @@
+Fri Jul 22 13:51:29 2011  Eric Hodel  <drbrain@s...>
+
+	* 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@g...>
 
 	* ext/openssl/ossl_hmac.c: Revert checking return type of
Index: ext/readline/readline.c
===================================================================
--- ext/readline/readline.c	(revision 32611)
+++ ext/readline/readline.c	(revision 32612)
@@ -454,15 +454,71 @@
  * 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)

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]