From a78713ce45fa006cdbf4c72d0fa1a4f1fd8c38fa Mon Sep 17 00:00:00 2001 From: kouji Date: Tue, 6 Aug 2013 12:52:22 +0000 Subject: [PATCH] * ext/readline/readline.c (readline_s_set_point, Init_readline): add Readline.point=(pos). Patched by naruse. [ruby-dev:47535] [Feature #8675] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42405 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 6 ++++++ ext/readline/readline.c | 19 +++++++++++++++++++ test/readline/test_readline.rb | 20 +++++++++++++++++++- 3 files changed, 44 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 06eb7d4766..04071e9667 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Tue Aug 6 21:48:31 2013 Kouji Takao + + * ext/readline/readline.c (readline_s_set_point, Init_readline): + add Readline.point=(pos). Patched by naruse. [ruby-dev:47535] + [Feature #8675] + Tue Aug 6 21:14:11 2013 Kouji Takao * ext/readline/readline.c (Init_readline, readline_s_set_output) diff --git a/ext/readline/readline.c b/ext/readline/readline.c index 35facdd654..f51d64336d 100644 --- a/ext/readline/readline.c +++ b/ext/readline/readline.c @@ -896,8 +896,25 @@ readline_s_get_point(VALUE self) { return INT2NUM(rl_point); } + +/* + * call-seq: + * Readline.point = int + * + * Set the index of the current cursor position in + * +Readline.line_buffer+. + * + * See +Readline.point+. + */ +static VALUE +readline_s_set_point(VALUE self, VALUE pos) +{ + rl_point = NUM2INT(pos); + return pos; +} #else #define readline_s_get_point rb_f_notimplement +#define readline_s_set_point rb_f_notimplement #endif static char ** @@ -1849,6 +1866,8 @@ Init_readline() readline_s_get_line_buffer, 0); rb_define_singleton_method(mReadline, "point", readline_s_get_point, 0); + rb_define_singleton_method(mReadline, "point=", + readline_s_set_point, 1); rb_define_singleton_method(mReadline, "set_screen_size", readline_s_set_screen_size, 2); rb_define_singleton_method(mReadline, "get_screen_size", diff --git a/test/readline/test_readline.rb b/test/readline/test_readline.rb index 62b44f884c..3b00daba07 100644 --- a/test/readline/test_readline.rb +++ b/test/readline/test_readline.rb @@ -17,6 +17,11 @@ class TestReadline < Test::Unit::TestCase def teardown ENV[INPUTRC] = @inputrc Readline.instance_variable_set("@completion_proc", nil) + begin + Readline.delete_text + Readline.point = 0 + rescue NotImplementedError + end end if !/EditLine/n.match(Readline::VERSION) @@ -311,9 +316,22 @@ class TestReadline < Test::Unit::TestCase end end + def test_point + assert_equal(0, Readline.point) + Readline.insert_text('12345') + assert_equal(5, Readline.point) + + assert_equal(4, Readline.point=(4)) + + Readline.insert_text('abc') + assert_equal(7, Readline.point) + + assert_equal('1234abc5', Readline.line_buffer) + rescue NotImplementedError + end if !/EditLine/n.match(Readline::VERSION) + def test_insert_text str = "test_insert_text" - with_pipe {|r, w| w.write("\C-a\n")} # reset rl_point assert_equal(0, Readline.point) assert_equal(Readline, Readline.insert_text(str)) assert_equal(str, Readline.line_buffer)