summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorkyab <[email protected]>2013-07-18 00:14:03 +0900
committerkyab <[email protected]>2013-07-18 00:14:03 +0900
commit4306fe798fc92e3a59c1dd3b020f6131c2e80ab4 (patch)
tree00b3bc6f8a932bab571c2ef43f99ea5e49237bd5
parent958d5b763df9cbfbf0173d35ba0ba27934f16394 (diff)
downloadmruby-4306fe798fc92e3a59c1dd3b020f6131c2e80ab4.tar.gz
mruby-4306fe798fc92e3a59c1dd3b020f6131c2e80ab4.zip
Save mirb history when readline enabled
-rw-r--r--mrbgems/mruby-bin-mirb/tools/mirb/mirb.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c b/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c
index eb7194f30..9f030c112 100644
--- a/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c
+++ b/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c
@@ -15,11 +15,19 @@
#include <mruby/data.h>
#include <mruby/compile.h>
#ifdef ENABLE_READLINE
+#include <limits.h>
#include <readline/readline.h>
#include <readline/history.h>
#endif
#include <mruby/string.h>
+
+#ifdef ENABLE_READLINE
+static const char *history_file_name = ".mirb_history";
+char history_path[PATH_MAX];
+#endif
+
+
static void
p(mrb_state *mrb, mrb_value obj, int prompt)
{
@@ -268,6 +276,16 @@ main(int argc, char **argv)
if (args.verbose) cxt->dump_result = 1;
ai = mrb_gc_arena_save(mrb);
+
+#ifdef ENABLE_READLINE
+ using_history();
+ strcpy(history_path, getenv("HOME"));
+ strcat(history_path, "/");
+ strcat(history_path, history_file_name);
+ read_history(history_path);
+#endif
+
+
while (TRUE) {
#ifndef ENABLE_READLINE
print_cmdline(code_block_open);
@@ -361,5 +379,9 @@ main(int argc, char **argv)
mrbc_context_free(mrb, cxt);
mrb_close(mrb);
+#ifdef ENABLE_READLINE
+ write_history(history_path);
+#endif
+
return 0;
}