Commit | Line | Data |
---|---|---|
31690700 JM |
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 | ||
e10ceff5 | 9 | var ffi = require('ffi-napi'), |
31690700 JM |
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) { | |
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 | }; |
46 | var readline = exports; |