summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinus Groh <mail@linusgroh.de>2020-10-25 23:36:06 +0000
committerAndreas Kling <kling@serenityos.org>2020-10-26 11:27:54 +0100
commit0f5d1f407473145c9e0395baf21c433d0bbf712d (patch)
tree9616757b0d1c14314cc57370eecad45e2edd1342
parentd412fbdcf3919a48c05b5ca4f5b369627b3a1710 (diff)
downloadserenity-0f5d1f407473145c9e0395baf21c433d0bbf712d.zip
js: Load and save history from/to ~/.js-history
This is super useful when hacking on LibJS and in general :^)
-rw-r--r--Userland/js.cpp5
1 files changed, 5 insertions, 0 deletions
diff --git a/Userland/js.cpp b/Userland/js.cpp
index e19965cbb8..316160e0d7 100644
--- a/Userland/js.cpp
+++ b/Userland/js.cpp
@@ -29,6 +29,7 @@
#include <AK/StringBuilder.h>
#include <LibCore/ArgsParser.h>
#include <LibCore/File.h>
+#include <LibCore/StandardPaths.h>
#include <LibJS/AST.h>
#include <LibJS/Console.h>
#include <LibJS/Interpreter.h>
@@ -68,6 +69,7 @@ private:
static bool s_dump_ast = false;
static bool s_print_last_result = false;
static RefPtr<Line::Editor> s_editor;
+static String s_history_path = String::formatted("{}/.js-history", Core::StandardPaths::home_directory());
static int s_repl_line_level = 0;
static bool s_fail_repl = false;
@@ -572,10 +574,12 @@ int main(int argc, char** argv)
interpreter->vm().set_underscore_is_last_value(true);
s_editor = Line::Editor::construct();
+ s_editor->load_history(s_history_path);
signal(SIGINT, [](int) {
if (!s_editor->is_editing())
sigint_handler();
+ s_editor->save_history(s_history_path);
});
s_editor->on_display_refresh = [syntax_highlight](Line::Editor& editor) {
@@ -763,6 +767,7 @@ int main(int argc, char** argv)
};
s_editor->on_tab_complete = move(complete);
repl(*interpreter);
+ s_editor->save_history(s_history_path);
} else {
interpreter = JS::Interpreter::create<JS::GlobalObject>(*vm);
ReplConsoleClient console_client(interpreter->global_object().console());