[seed] Improve multiline support in REPL
- From: Robert Carr <racarr src gnome org>
- To: svn-commits-list gnome org
- Subject: [seed] Improve multiline support in REPL
- Date: Thu, 7 May 2009 04:20:47 -0400 (EDT)
commit f2cec5dacdd29ffaeb635d9f33a514782b5faf99
Author: Robert Carr <racarr svn gnome org>
Date: Thu May 7 04:19:51 2009 -0400
Improve multiline support in REPL
---
examples/repl.js | 20 ++++++++++----------
modules/readline/seed-readline.c | 31 ++++++++++++++++++++++++++++++-
2 files changed, 40 insertions(+), 11 deletions(-)
diff --git a/examples/repl.js b/examples/repl.js
index 113bcf5..ad410d6 100755
--- a/examples/repl.js
+++ b/examples/repl.js
@@ -2,6 +2,7 @@
readline = imports.readline;
sandbox = imports.sandbox;
+os = imports.os;
var lastLastLength = '-1';
@@ -11,26 +12,25 @@ context.add_globals();
bind_cr = function(){
var buffer = readline.buffer();
if (buffer.length == lastLastLength)
- readline.rl_done();
+ readline.done();
try {
Seed.check_syntax(buffer);
- readline.rl_done();
+ readline.done();
}
catch (e){
- if (buffer[buffer.length] == '\n' || buffer[buffer.length] == '\r')
- readline.rl_done();
+ os.write(1, "\n..");
+ lastLastLength = buffer.length;
+ return;
}
- Seed.print("");
+ os.write(1, "\n");
lastLastLength = buffer.length;
}
-bind_tab = function(){
- os.write(1, "\t");
-}
-
readline.bind('\n', bind_cr);
readline.bind('\r', bind_cr);
-readline.bind('\t', bind_tab);
+readline.bind('\t', function(){
+ readline.insert("\t");
+});
while(1){
try{
diff --git a/modules/readline/seed-readline.c b/modules/readline/seed-readline.c
index a49b039..4348aa7 100644
--- a/modules/readline/seed-readline.c
+++ b/modules/readline/seed-readline.c
@@ -96,6 +96,30 @@ seed_rl_buffer(SeedContext ctx,
}
static SeedValue
+seed_rl_insert(SeedContext ctx,
+ SeedObject function,
+ SeedObject this_object,
+ size_t argumentCount,
+ const SeedValue arguments[],
+ SeedValue * exception)
+{
+ gchar *ins;
+ gint ret;
+ if (argumentCount != 1)
+ {
+ seed_make_exception (ctx, exception, "ArgumentError",
+ "readline.insert expected 1 argument, got %d",
+ argumentCount);
+ return seed_make_null (ctx);
+ }
+ ins = seed_value_to_string (ctx, arguments[0], exception);
+ ret = rl_insert_text (ins);
+ g_free (ins);
+
+ return seed_value_from_int (ctx, ret, exception);
+}
+
+static SeedValue
seed_readline(SeedContext ctx,
SeedObject function,
SeedObject this_object,
@@ -164,7 +188,7 @@ seed_module_init(SeedEngine * local_eng)
(SeedObject) namespace_ref);
seed_create_function(eng->context,
- "rl_done",
+ "done",
(SeedFunctionCallback) seed_rl_done,
(SeedObject) namespace_ref);
@@ -173,6 +197,11 @@ seed_module_init(SeedEngine * local_eng)
(SeedFunctionCallback) seed_rl_buffer,
(SeedObject) namespace_ref);
+ seed_create_function(eng->context,
+ "insert",
+ (SeedFunctionCallback) seed_rl_insert,
+ (SeedObject) namespace_ref);
+
return namespace_ref;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]