DISABLE FDs (REMOVE ME).
[jackhill/mal.git] / js / node_readline.js
CommitLineData
31690700
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
7var rlwrap = {}; // namespace for this module in web context
8
e10ceff5 9var ffi = require('ffi-napi'),
31690700
JM
10 fs = require('fs');
11
12var rllib = ffi.Library(RL_LIB, {
13 'readline': [ 'string', [ 'string' ] ],
14 'add_history': [ 'int', [ 'string' ] ]});
15
16var rl_history_loaded = false;
17
18exports.readline = rlwrap.readline = function(prompt) {
67136d8c 19 prompt = typeof prompt !== 'undefined' ? prompt : "user> ";
31690700
JM
20
21 if (!rl_history_loaded) {
22 rl_history_loaded = true;
4cd29262
WB
23 var lines = [];
24 if (fs.existsSync(HISTORY_FILE)) {
25 lines = fs.readFileSync(HISTORY_FILE).toString().split("\n");
26 }
31690700
JM
27 // Max of 2000 lines
28 lines = lines.slice(Math.max(lines.length - 2000, 0));
29 for (var i=0; i<lines.length; i++) {
30 if (lines[i]) { rllib.add_history(lines[i]); }
31 }
32 }
33
34 var line = rllib.readline(prompt);
35 if (line) {
36 rllib.add_history(line);
c9de2e82
JM
37 try {
38 fs.appendFileSync(HISTORY_FILE, line + "\n");
39 } catch (exc) {
40 // ignored
41 }
31690700
JM
42 }
43
44 return line;
31b44161
JM
45};
46var readline = exports;