Update JS impls: use ffi-napi and Ubuntu 18.04
[jackhill/mal.git] / es6 / node_readline.js
CommitLineData
4eb71990
JM
1// IMPORTANT: choose one
2var RL_LIB = "libreadline"; // NOTE: libreadline is GPL
3//var RL_LIB = "libedit";
4
5var HISTORY_FILE = require('path').join(process.env.HOME, '.mal-history');
6
e10ceff5 7var ffi = require('ffi-napi'),
4eb71990
JM
8 fs = require('fs');
9
10var rllib = ffi.Library(RL_LIB, {
11 'readline': [ 'string', [ 'string' ] ],
12 'add_history': [ 'int', [ 'string' ] ]});
13
14var rl_history_loaded = false;
15
a11a0235 16function readline(prompt) {
4eb71990
JM
17 prompt = prompt || "user> ";
18
19 if (!rl_history_loaded) {
20 rl_history_loaded = true;
21 var lines = [];
22 if (fs.existsSync(HISTORY_FILE)) {
23 lines = fs.readFileSync(HISTORY_FILE).toString().split("\n");
24 }
25 // Max of 2000 lines
26 lines = lines.slice(Math.max(lines.length - 2000, 0));
27 for (var i=0; i<lines.length; i++) {
28 if (lines[i]) { rllib.add_history(lines[i]); }
29 }
30 }
31
32 var line = rllib.readline(prompt);
33 if (line) {
34 rllib.add_history(line);
35 try {
36 fs.appendFileSync(HISTORY_FILE, line + "\n");
37 } catch (exc) {
38 // ignored
39 }
40 }
41
42 return line;
43};
a11a0235
JM
44
45//exports.readline = readline
46module.exports = {readline: readline}