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

ruby-changes:22041

From: nobu <ko1@a...>
Date: Wed, 21 Dec 2011 15:23:25 +0900 (JST)
Subject: [ruby-changes:22041] nobu:r34090 (trunk): * goruby.c (goruby_options): auto irb.

nobu	2011-12-21 15:23:15 +0900 (Wed, 21 Dec 2011)

  New Revision: 34090

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

  Log:
    * goruby.c (goruby_options): auto irb.

  Modified files:
    trunk/goruby.c

Index: goruby.c
===================================================================
--- goruby.c	(revision 34089)
+++ goruby.c	(revision 34090)
@@ -1,8 +1,13 @@
+#include <unistd.h>
+
 void Init_golf(void);
+#define ruby_options goruby_options
 #define ruby_run_node goruby_run_node
 #include "main.c"
+#undef ruby_options
 #undef ruby_run_node
 
+RUBY_EXTERN void *ruby_options(int argc, char **argv);
 RUBY_EXTERN int ruby_run_node(void*);
 RUBY_EXTERN void ruby_init_ext(const char *name, void (*init)(void));
 
@@ -13,6 +18,29 @@
     return arg;
 }
 
+void *
+goruby_options(int argc, char **argv)
+{
+    static const char cmd[] = "require 'irb'\nIRB.start";
+    int rw[2], infd;
+    void *ret;
+
+    if ((isatty(0) && isatty(1) && isatty(2)) && (pipe(rw) == 0)) {
+	infd = dup(0);
+	dup2(rw[0], 0);
+	close(rw[0]);
+	write(rw[1], cmd, sizeof(cmd) - 1);
+	close(rw[1]);
+	ret = ruby_options(argc, argv);
+	dup2(infd, 0);
+	close(infd);
+	return ret;
+    }
+    else {
+	return ruby_options(argc, argv);
+    }
+}
+
 int
 goruby_run_node(void *arg)
 {

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

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