DISABLE FDs (REMOVE ME).
[jackhill/mal.git] / js / node_readline.js
1 // IMPORTANT: choose one
2 var RL_LIB = "libreadline"; // NOTE: libreadline is GPL
3 //var RL_LIB = "libedit";
4
5 var HISTORY_FILE = require('path').join(process.env.HOME, '.mal-history');
6
7 var rlwrap = {}; // namespace for this module in web context
8
9 var ffi = require('ffi-napi'),
10 fs = require('fs');
11
12 var rllib = ffi.Library(RL_LIB, {
13 'readline': [ 'string', [ 'string' ] ],
14 'add_history': [ 'int', [ 'string' ] ]});
15
16 var rl_history_loaded = false;
17
18 exports.readline = rlwrap.readline = function(prompt) {
19 prompt = typeof prompt !== 'undefined' ? prompt : "user> ";
20
21 if (!rl_history_loaded) {
22 rl_history_loaded = true;
23 var lines = [];
24 if (fs.existsSync(HISTORY_FILE)) {
25 lines = fs.readFileSync(HISTORY_FILE).toString().split("\n");
26 }
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);
37 try {
38 fs.appendFileSync(HISTORY_FILE, line + "\n");
39 } catch (exc) {
40 // ignored
41 }
42 }
43
44 return line;
45 };
46 var readline = exports;