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

ruby-changes:10464

From: kouji <ko1@a...>
Date: Tue, 3 Feb 2009 21:25:07 +0900 (JST)
Subject: [ruby-changes:10464] Ruby:r22014 (trunk): * ext/readline/extconf.rb: checked rl_set_screen_size and

kouji	2009-02-03 21:21:08 +0900 (Tue, 03 Feb 2009)

  New Revision: 22014

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

  Log:
    * ext/readline/extconf.rb: checked rl_set_screen_size and
      rl_get_screen_size.
    * ext/readline/readline.c (readline_s_set_screen_size): added
      Readline.set_screen_size.
    
    * ext/readline/readline.c (readline_s_get_screen_size): added
      Readline.get_screen_size.

  Modified files:
    trunk/ChangeLog
    trunk/ext/readline/extconf.rb
    trunk/ext/readline/readline.c
    trunk/test/readline/test_readline.rb

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 22013)
+++ ChangeLog	(revision 22014)
@@ -1,3 +1,14 @@
+Tue Feb  3 21:19:06 2009  TAKAO Kouji  <kouji@t...>
+
+	* ext/readline/extconf.rb: checked rl_set_screen_size and
+	  rl_get_screen_size.
+
+	* ext/readline/readline.c (readline_s_set_screen_size): added
+	  Readline.set_screen_size.
+
+	* ext/readline/readline.c (readline_s_get_screen_size): added
+	  Readline.get_screen_size.
+
 Tue Feb  3 21:07:19 2009  TAKAO Kouji  <kouji@t...>
 
 	* ext/readline/readline.c (readline_s_set_completion_proc): set
Index: ext/readline/readline.c
===================================================================
--- ext/readline/readline.c	(revision 22013)
+++ ext/readline/readline.c	(revision 22014)
@@ -438,6 +438,62 @@
 
 /*
  * call-seq:
+ *   Readline.set_screen_size(rows, columns) -> self
+ *
+ * Set terminal size to +rows+ and +columns+.
+ *
+ * See GNU Readline's rl_set_screen_size function. 
+ *
+ * Raises NotImplementedError if the using readline library does not support.
+ *
+ * Raises SecurityError exception if $SAFE is 4.
+ */
+static VALUE
+readline_s_set_screen_size(VALUE self, VALUE rows, VALUE columns)
+{
+#ifdef HAVE_RL_SET_SCREEN_SIZE
+    rb_secure(4);
+    rl_set_screen_size(NUM2INT(rows), NUM2INT(columns));
+    return self;
+#else
+    rb_notimplement();
+    return Qnil; /* not reached */
+#endif /* HAVE_RL_SET_SCREEN_SIZE */
+}
+
+/*
+ * call-seq:
+ *   Readline.get_screen_size -> [rows, columns]
+ *
+ * Returns the terminal's rows and columns.
+ *
+ * See GNU Readline's rl_get_screen_size function. 
+ *
+ * Raises NotImplementedError if the using readline library does not support.
+ *
+ * Raises SecurityError exception if $SAFE is 4.
+ */
+static VALUE
+readline_s_get_screen_size(VALUE self)
+{
+#ifdef HAVE_RL_GET_SCREEN_SIZE
+    int rows, columns;
+    VALUE res;
+    
+    rb_secure(4);
+    rl_get_screen_size(&rows, &columns);
+    res = rb_ary_new();
+    rb_ary_push(res, INT2NUM(rows));
+    rb_ary_push(res, INT2NUM(columns));
+    return res;
+#else
+    rb_notimplement();
+    return Qnil; /* not reached */
+#endif /* HAVE_RL_GET_SCREEN_SIZE */
+}
+
+/*
+ * call-seq:
  *   Readline.vi_editing_mode -> nil
  *
  * Specifies VI editing mode. See the manual of GNU Readline for
@@ -1200,6 +1256,10 @@
 			       readline_s_set_completion_case_fold, 1);
     rb_define_singleton_method(mReadline, "completion_case_fold",
 			       readline_s_get_completion_case_fold, 0);
+    rb_define_singleton_method(mReadline, "set_screen_size",
+			       readline_s_set_screen_size, 2);
+    rb_define_singleton_method(mReadline, "get_screen_size",
+			       readline_s_get_screen_size, 0);
     rb_define_singleton_method(mReadline, "vi_editing_mode",
 			       readline_s_vi_editing_mode, 0);
     rb_define_singleton_method(mReadline, "vi_editing_mode?",
Index: ext/readline/extconf.rb
===================================================================
--- ext/readline/extconf.rb	(revision 22013)
+++ ext/readline/extconf.rb	(revision 22014)
@@ -63,6 +63,8 @@
 /mswin|bccwin|mingw/ !~ RUBY_PLATFORM && have_readline_var("rl_event_hook")
 have_readline_func("rl_cleanup_after_signal")
 have_readline_func("rl_clear_signals")
+have_readline_func("rl_set_screen_size")
+have_readline_func("rl_get_screen_size")
 have_readline_func("rl_vi_editing_mode")
 have_readline_func("rl_emacs_editing_mode")
 have_readline_func("replace_history_entry")
Index: test/readline/test_readline.rb
===================================================================
--- test/readline/test_readline.rb	(revision 22013)
+++ test/readline/test_readline.rb	(revision 22014)
@@ -3,6 +3,8 @@
 =begin
   class << Readline
     [
+     "set_screen_size",
+     "get_screen_size",
      "vi_editing_mode",
      "emacs_editing_mode",
      "completion_append_character=",
@@ -61,6 +63,8 @@
        ["completer_quote_characters"],
        ["filename_quote_characters=", "\\"],
        ["filename_quote_characters"],
+       ["set_screen_size", 1, 1],
+       ["get_screen_size"],
       ]
     method_args.each do |method_name, *args|
       assert_raise(SecurityError, NotImplementedError,
@@ -140,6 +144,19 @@
     end
   end
 
+  def test_get_screen_size
+    begin
+      res = Readline.get_screen_size
+      assert(res.is_a?(Array))
+      rows, columns = *res
+      assert(rows.is_a?(Integer))
+      assert(rows >= 0)
+      assert(columns.is_a?(Integer))
+      assert(columns >= 0)
+    rescue NotImplementedError
+    end
+  end
+  
   # vi_editing_mode
   # emacs_editing_mode
   def test_editing_mode

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

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