diff options
Diffstat (limited to 'js/node_readline.js')
| -rw-r--r-- | js/node_readline.js | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/js/node_readline.js b/js/node_readline.js new file mode 100644 index 0000000..bfd1982 --- /dev/null +++ b/js/node_readline.js @@ -0,0 +1,38 @@ +// IMPORTANT: choose one +var RL_LIB = "libreadline"; // NOTE: libreadline is GPL +//var RL_LIB = "libedit"; + +var HISTORY_FILE = require('path').join(process.env.HOME, '.mal-history'); + +var rlwrap = {}; // namespace for this module in web context + +var ffi = require('ffi'), + fs = require('fs'); + +var rllib = ffi.Library(RL_LIB, { + 'readline': [ 'string', [ 'string' ] ], + 'add_history': [ 'int', [ 'string' ] ]}); + +var rl_history_loaded = false; + +exports.readline = rlwrap.readline = function(prompt) { + prompt = prompt || "user> "; + + if (!rl_history_loaded) { + rl_history_loaded = true; + var lines = fs.readFileSync(HISTORY_FILE).toString().split("\n"); + // Max of 2000 lines + lines = lines.slice(Math.max(lines.length - 2000, 0)); + for (var i=0; i<lines.length; i++) { + if (lines[i]) { rllib.add_history(lines[i]); } + } + } + + var line = rllib.readline(prompt); + if (line) { + rllib.add_history(line); + fs.appendFileSync(HISTORY_FILE, line + "\n"); + } + + return line; +} |
